2011-09-21 31 views
7

這可能是一個常見問題解答,但即使經過大量搜索,我們仍無法找到解決方案。將msbuild中的編譯項目移動到單獨的文件中?

我們有許多msbuild文件,它們都在同一組源文件上運行。 (它並不特別相關,但它們編譯到完全不同的平臺。)爲了使這些管理更簡單一些,我們希望將<Compile>源文件名移動到單獨的文件並引用所有msbuild文件。

我們試圖切割<ItemGroup>包含<Compile>項目並將其粘貼到一個新的文件,並圍繞它

<Project DefaultTargets="Build" ToolsVersion="3.5"xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

然後引用從原來的那個文件,

<Import Project="Common.files.csproj" />

但這不起作用 - 解決方案打開(由於我們攻擊了默認配置,因此發出警告),bu t解決方案資源管理器中沒有項目出現。

我們做錯了什麼?

+0

如果選擇「顯示所有文件」,會發生什麼情況? – mellamokb

+1

@mellamokb:那應該不重要 - 顯示所有文件只切換顯示磁盤上的內容。我也嘗試過,以確保。 – bright

回答

10

試圖與Visual Studio 2010中:

1)創建您的外部.proj(或.TARGET)文件,並添加文件(我用的是不同的項目名稱但不應該的問題)

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <ItemGroup> 
     <ExternalCompile Include="Program.cs" /> 
     <ExternalCompile Include="Properties\AssemblyInfo.cs" /> 
    </ItemGroup> 
</Project> 

2)在Visual Studio項目文件的頂端導入您的外部.proj文件

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Import Project="MyExternalSources.proj" /> 
    <PropertyGroup> 
    ... 

和修改Compile的ItemGroup這樣的:

... 
<ItemGroup> 
    <Compile Include="@(ExternalCompile)" /> 
</ItemGroup> 
... 

警告:你得新的項目/文件添加到您的外部.proj文件 - 在Visual Studio中添加來自所有項目/文件最終會這樣:

... 
<ItemGroup> 
    <Compile Include="@(ExternalCompile)" /> 
    <Compile Include="MyNewClass.cs" /> 
</ItemGroup> 
... 
+0

優秀, 這樣可行。是的,很遺憾必須手動添加項目,但可以像平常一樣添加項目,然後在簽入之前移動到外部文件。 – bright

+0

我嘗試了與相同的技巧,但它似乎不起作用。有沒有人知道如何導入「默認」內容集,例如當與現有的OSS編譯的Web應用程序一起工作時。 – uniquelau

+0

@uniquelau當文件位於「主」項目文件夾之外時,我只是試過並且遇到了一個問題。只要我將「靜態」內容移動到項目文件夾中,它就與「Content」ItemGroup一樣工作。我的解決方案實際上只是一種解決方法,並顯示如何調整VS項目文件。也許一個自定義的構建後任務可以處理你的案例中移動的靜態內容。 – Filburt

0

我從來沒有見過「包含」文件與MSBuild一起使用。很明顯,目標文件以這種方式工作,但我沒有看到另一個部分的msbuild文件。你是否可以使用這樣的方法?
http://msdn.microsoft.com/en-us/library/ms171454(VS.80).aspx

使用通配符是我過去如何解決這個問題。

+0

謝謝,但我仍然支持解決方案。如果一切都失敗了,這可能是最後的手段,但它不是最佳的。 – bright

+0

您還可以使用CreateItem任務加上您自己的自定義文件分析功能在BeforeBuild目標期間將項目添加到編譯ItemGroup中... http://msdn.microsoft.com/en-us/library/s2y3e43x.aspx –

相關問題