1

MSBuild でビルドしている .net / C# プロジェクトがいくつかあります。

私が構築しているプロジェクトには、他の C# プロジェクトへのプロジェクト参照がいくつかあります。

私は個々のプロジェクトのみをビルドしているので、ビルド中にフォルダー内の実際のバイナリへのプロジェクト参照を再指定したいと思います。

MSBuild ステップで既に "BuildProjectReferences" を False に設定しています。

したがって、基本的には、MSBuild にプロジェクト ref を無視させ、新しいディレクトリでそれらのバイナリを探してもらいたいと考えています。

これは可能ですか?ビルド前にプロジェクト ファイルを動的に変更しなくても、これは可能ですか?

** アップデート 1 **

詳細情報が役立つかもしれません...私は実際に、Ant/AntDotNet/MSBuild を介して各バイナリを構築し、Artifactory にアップロードしています。私は基本的に、.Net バイナリで Ivy の依存関係管理を使用しています。

現在、依存関係のアップロードとダウンロードが正常に機能しています。

私が見逃している唯一の部分は、MSBuild がプロジェクト ファイルにあるプロジェクト参照ではなく、ファイルの依存関係としてバイナリを検索することです。

** アップデート 2 **

MSBuild は、XMLPoke および XMLPeek を使用した csproj ファイルの編集をサポートしているようです。

したがって、私の場合、プロジェクト ファイルで次のように変更する必要があります。

<ProjectReference Include="..\MyReferencedProject\MyReferencedProject.csproj">
  <Project>{MyReferencedProjectGUID}</Project>
  <Name>MyReferencedProject</Name>
  <Private>False</Private>
</ProjectReference>

これに

<Reference Include="MyReferencedProject">
</Reference>

誰かが私にそれについての指針を与えることができますか?

4

2 に答える 2

0

Ant をxmltaskアドオンと組み合わせて使用​​することになりました。

<target name="convert" description="convert project references to file references">
    <echo>Converting the following Project references :: ${Project.ItemGroup.ProjectReference.Name}</echo>
    <xmltask source="MyParentProject.csproj" dest="MyParentProject.csproj">
        <rename path="/:Project/:ItemGroup/:ProjectReference/:Name" to="BinaryName"/>
    </xmltask>
    <replace file="MyParentProject.csproj" token="&lt;BinaryName&gt;" value="&lt;Reference Include=&quot;"/>
    <replace file="MyParentProject.csproj" token="&lt;/BinaryName&gt;" value="&quot;&gt;&lt;/Reference&gt;"/>
    <xmltask source="MyParentProject.csproj" dest="MyParentProject.csproj">
        <copy path="/:Project/:ItemGroup/:ProjectReference/:Reference" buffer="refbuffer" append="true"/>
        <paste path="/:Project/:ItemGroup[1]" buffer="refbuffer"/>
        <remove path="/:Project/:ItemGroup/:ProjectReference" /> 
    </xmltask>
    <echo>Conversion complete.</echo>
</target>

最初の xmltask では、"Name" 要素を "BinaryName" に設定して、見つけられるようにします。

次に、次のような変更を行う 2 つの Ant Replace タスクがあります。

"<BinaryName>MyReferencedProject</BinaryName>" 

"<Reference Include="MyReferencedProject"></Reference>"

最後の xmltask では、ファイル参照に変換したプロジェクト参照を、通常はファイル参照を持つ上位の ItemGroup に移動します。

最後に、ProjectReferences セクションを削除します。

于 2011-12-06T21:44:40.647 に答える
0

Update2 の回答: あなたの質問は、この質問に関連/重複しています。簡単に変換する方法はありません。ビルド前に MSBuild プロジェクト ファイルを更新するには、MSBuild カスタム タスクを記述する必要があります。

于 2011-12-06T06:35:15.037 に答える