2011-12-05 36 views
1

我有一些.net/C#項目,我正在使用MSBuild構建。MSBuild:將項目引用更改爲文件二進制引用

在我正在構建的項目中,有一些項目引用了其他C#項目。

我只建立單個項目,所以我想在構建過程中重新指定文件夾中的實際二進制文件的項目引用。

我已經將「BuildProjectReferences」設置爲False,用於我的MSBuild步驟。

所以基本上我想讓MSBuild忽略項目引用並在新目錄中查找這些二進制文件。

這可能嗎?這可能不需要在構建之前動態修改項目文件?

**更新1 **

更多信息可以幫助...我實際上建立通過Ant/AntDotNet /的MSBuild和上傳每個二進制artifactory的。我基本上使用Ivy的依賴管理和.Net二進制文件。

現在我的上傳和下載的依賴關係工作正常。

我唯一缺少的部分是讓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> 

誰能給我任何指針?

回答

0

我結束了使用螞蟻結合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我們設置「名稱」元素「BinaryName」這樣我們就可以找到它。

接下來我們有兩個螞蟻替換更改類似

"<BinaryName>MyReferencedProject</BinaryName>" 

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

任務,並在最後xmltask移動我們的項目引用,我們轉換成文件引用到上的ItemGroup通常有文件參考。

然後最後我們刪除ProjectReferences部分。

0

回覆Update2: 您的問題是相關/重複至this question。沒有簡單的方法來轉換它。您應該編寫MSBuild自定義任務,以便在構建之前更新MSBuild項目文件。

+0

好吧,看起來我需要爲此提供某種XPath語句。在XPath/XSLT領域的任何幫助將不勝感激。 – DonBecker

+0

我不認爲你可以通過XPath/XSLT來完成。您需要從引用的項目中獲取OutputPath和AssemblyName屬性並將其應用於二進制引用 – Ludwo

+0

我們的命名是標準化的,因此我不需要該文件的任何屬性。文件引用將始終與項目名稱完全匹配。 – DonBecker

相關問題