我會立即承認完全不熟悉msbuild,並希望我不問一個愚蠢的問題。防止所有與msbuild的複製操作和一個大的解決方案
我們有一個大型的.NET解決方案,其中有大約316個項目。在構建過程中,似乎大量的構建時間被它從一個文件夾複製到另一個文件夾(這是我假設的,以便它們可用於解析引用?)。有沒有辦法指導MSBuild將每個項目的輸出文件放到一個文件夾中以避免需要這樣做?看起來這樣做是明智的,因爲最終我們將最終結果從最終輸出文件夾中複製出來,而所有其他中間DLL都只是被浪費了。
我會立即承認完全不熟悉msbuild,並希望我不問一個愚蠢的問題。防止所有與msbuild的複製操作和一個大的解決方案
我們有一個大型的.NET解決方案,其中有大約316個項目。在構建過程中,似乎大量的構建時間被它從一個文件夾複製到另一個文件夾(這是我假設的,以便它們可用於解析引用?)。有沒有辦法指導MSBuild將每個項目的輸出文件放到一個文件夾中以避免需要這樣做?看起來這樣做是明智的,因爲最終我們將最終結果從最終輸出文件夾中複製出來,而所有其他中間DLL都只是被浪費了。
這可能通過重寫OutDir
屬性。例如:
msbuild your.sln /p:Configuration=Release;OutDir="C:\SomeFolder\Release" /m
此外,你可以disable the CopyLocal setting for references加快構建過程。
見What are the obj and bin folders (created by Visual Studio) used for?
確保它實際上是需要時間的副本。運行帶有/詳細程度的msbuild命令:diag(或使用/flp:文件名= <myfile>; Verbosity = diag來寫入文件)。在文件結尾處,您會看到每一步所花費的時間。
您可以嘗試將構建與/m選項並行化。默認情況下,msbuild運行在1個線程和316個項目上,我可以想象這可能會很慢。
我在發佈之後纔看到有關使用/ m選項的評論。好建議。 – SoftwareCarpenter 2012-07-09 11:44:43
建設316個項目是一次建立的很多項目。您可以考慮將您的項目分解爲分離依賴項的邏輯解決方案。
還可以通過將最大CPU計數屬性設置爲較高值來並行構建項目來加快速度。
BuildInParallel是一個MSBuild任務的可選布爾參數。 當BuildInParallel設置爲true(其默認值)時,會生成多個 工作進程,以儘可能多地構建儘可能多的項目。爲使此功能正常運行,必須將/ maxcpucount開關 設置爲大於1的值,並且系統必須至少爲 雙核或具有兩個或更多處理器。
以下是有關如何設置BuildInParallel參數的示例,摘自microsoft.common.targets, 。/maxcpucount:數字 指定 構建中涉及的工作進程的數量。例如:C:\ Windows \ WinFX \ v3.5> msbuild.exe * .proj /maxcpucount:3。本示例指示MSBuild使用三個 MSBuild.exe進程構建,從而允許三個項目在 平行中構建。/m也是可以接受的。
@responders:謝謝,這些都很好。我把這個帖子發給了另一位同事,他本週出去了,所以我會把他們發給他,看看他的想法。我在看! – Shibumi 2012-07-09 20:44:18