2014-07-18 34 views
2

現狀描述:我們在兩種解決方案與一幫將軍「幫手」庫。我們需要.NET 4和.NET 4.5的所有庫,因爲依賴於這些庫的一些項目運行在不被觸及的系統上,這意味着我們不能將.NET 4.5放到這些系統上。構建.NET 4和.NET 4.5整個解決方案和文件複製到特定的文件夾

我們有一個工作構建服務器(TFS2012),每晚構建一次所有解決方案。目前,由於無法構建.NET 4項目或.NET 4.5項目,所以根據簽入的.csproj文件的當前狀態,我們會遇到錯誤。

我想要什麼/ 什麼是完美的:當某人(不管它是buildserver還是Visual Studio)編譯'幫助器'解決方案時,.NET 4和這些文件的.NET 4.5版本是編譯。 .NET 4文件被複制到C:\dll\a,.NET 4.5版本被複制到C:\dll\b

我偶然發現了:http://shazwazza.com/post/multi-targeting-a-single-net-project-to-build-for-different-framework-versions/但給定.csproj文件的數量我真的不想爲每個.csproj文件做這件事。

我的問題存在:

  • 有沒有辦法來編譯.NET 4和.NET 4.5整個解決方案和複製編譯庫到特定的文件夾?

  • 如果是,我該怎麼做?

  • 如果不是,有沒有這樣做,基本上導致相同的結果的另一種方式(.NET 4和.NET在兩個不同位置的相同 代碼4.5庫,以便它們可以通過參考 其他項目)?

+0

你能不能爲每個目標平臺創建一個csproj並構建它們? –

+0

@MarcGravell如果我可以把兩個.csproj文件引用相同的文件到一個解決方案中,是的。那會奏效。這會很醜,但它會起作用。 –

+0

哪部分是「醜陋的」? –

回答

1

本質上,一個csproj是一個構建目標;雖然有些東西可以作爲構建參數進行更改,但基礎平臺等更加棘手,並且簡單地維護每個構建目標的不同csproj是一個更好的主意。

您正確地(註釋)觀察到這意味着您需要分別維護引用 - 這是不可避免的,因爲某些平臺使用完全不同的dll來獲取相同的內容(cf,winrt等)。

但是,不是必然是你需要單獨維護文件的情況;這裏是從portable class library build for protobuf-net線:

<Compile Include="..\protobuf-net\**\*.cs" /> 

這意味着:編譯..\protobuf-net下的所有文件的.cs(遞歸)。你可能更分別維持在較小的項目文件列表 - 例如,這裏的「短小精悍」:

enter image description here

小BLU的箭頭指示文件鏈接,所以你可以看到:在主要代碼在「Dapper NET40」中,「Dapper NET35」和「Dapper NET45」使用相同的文件(「Dapper NET45」也增加了一個額外的文件)。

,並強調爲什麼引用都需要單獨維護,這裏的 「StackExchange.Redis」 爲.NET 4.5:

enter image description here

(非常乾淨) - 這裏的 「StackExchange.Redis」 爲.NET 4.0:

enter image description here

額外的引用來自Microsoft.Bcl,用於在.NET 4.0中得到充分Task API(和其他依賴)(它我內置在.NET 4.5中):

<packages> 
    <package id="Microsoft.Bcl" version="1.1.9" targetFramework="net40" /> 
    <package id="Microsoft.Bcl.Async" version="1.0.168" targetFramework="net40" /> 
    <package id="Microsoft.Bcl.Build" version="1.0.14" targetFramework="net40" /> 
</packages> 
+0

完美。感謝您的詳細解釋和您的快速回答/評論! –

相關問題