2011-12-05 27 views
1

MSBuildで構築しているいくつかの.net/C#プロジェクトがあります。MSBuild:ファイルバイナリ参照へのプロジェクト参照の変更

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

私は個々のプロジェクトをビルドしているだけなので、ビルド時にフォルダ内の実際のバイナリへのプロジェクト参照を再提示したいと思います。

MSBuildのステップで、すでに「BuildProjectReferences」をFalseに設定しています。

本質的に私は、MSBuildにプロジェクトのリファレンスを無視させて、新しいディレクトリのバイナリを探したいと思っています。

これは可能ですか?ビルドする前にプロジェクトファイルを動的に変更する必要はありませんか?

**更新** 1

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

今、私は依存関係のアップロードとダウンロードが正常に動作しています。

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

**更新** 2

MSBuildのはXMLPokeとXMLPeekを使用してcsprojファイルを編集するサポートように見えます。

だから私の場合、私は私のプロジェクトファイルに次のように変更する必要があると思います。この

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

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

は、誰も私にその上の任意のポインタを与えることはできますか?

答えて

0

私は、xmltaskアドオンと組み合わせた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> 

我々は「BinaryName」と「名前」の要素を設定しているので、我々はそれを見つけることができます。

次は、我々は2 Antが

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

そして最後xmltaskは、我々は通常、上ItemGroupへのファイル参照に変換され、当社のプロジェクト参照を移動中に

"<BinaryName>MyReferencedProject</BinaryName>" 

のようなものを変更するタスクを交換していファイル参照があります。

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

0

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

+0

私はXPath文を用意する必要があります。 XPath/XSLT領域のすべての助けがあれば幸いです。 – DonBecker

+0

私はあなたがXPath/XSLTでそれを行うことはできないと思います。参照先のプロジェクトからOutputPathプロパティとAssemblyNameプロパティを取得し、バイナリリファレンス – Ludwo

+0

に適用する必要があります。私たちの名前は標準化されているため、ファイルからのプロパティは必要ありません。ファイル参照は常にプロジェクト名と正確に一致します。 – DonBecker