我有一個由50個以上的類庫和〜10個SharePoint WSP項目組成的大型解決方案。我試圖優化構建時間,因爲默認情況下,它需要5分鐘以上體面的服務器硬件。構建包含僅存在於解決方案中的項目子集中的目標的解決方案
目前,生成過程是這樣的(僞):
MSBuild.exe MySolution.sln /T:Clean
MSBuild.exe MySolution.sln /T:Build
foreach (Project.csproj in *.csproj where is WSP project)
{
MSBuild.exe Project.csproj /T:CleanPackage
MSBuild.exe Project.csproj /T:Package
}
我想實現的就是做這一切使用單一MSBuild.exe
調用,從而使構建過程可以被並行化和重複處理在包裝WSP項目時被避免。
我可以爲一個WSP項目做到這一點很容易:
MSBuild.exe Project.csproj /T:Clean;CleanPackage;Build;Package
然而,當我做整體解決方案相同:
MSBuild.exe MySolution.sln /T:Clean;CleanPackage;Build;Package
MSBuild的失敗並報告錯誤,只要它在解決方案文件中找到不包含CleanPackage
目標的項目:
D:\ MySolution \ Clas s.Library.Project \ Class.Library.Project.csproj:錯誤MSB4057:目標「CleanPackage」在項目中不存在。
所以,問題是,如何解決這個問題,實現了單命令行生成調用無)進行手動更改所有csproj
文件(維護夢魘),B)編寫自定義複雜的構建腳本?我正在考慮定義一個包含一個自定義Target
的主構建文件。但是,我不確定如何在解決方案文件中向項目表達正確的依賴關係,而無需手動枚舉兩個組(類庫,WSP項目)中的所有單個項目。
注:雖然我的問題是類似this one,我決定繼續以覆蓋績效結果它的開放和自我回答。
通過調用重建目標而不是使用Clean/Build調用MSbuild兩次來加速構建(一點點),最終結果是相同的。對於其他部分:應該是一個相當簡單的MSbuild主腳本,但是具有Package目標的項目必須以特定順序調用嗎?它們是相互依賴於Package對象還是隻依賴Build對象? – stijn
@stijn(1)'重建':小細節,不完全是我正在解決的問題,以及我已經擺脫的問題。 (2)不,他們不相互依賴。 SharePoint WSP軟件包是最終產品 - 一行「exe」。但是,它們每個都依賴於解決方案中的多個類庫項目。 –
@stijn換句話說,我需要幫助的是「相當簡單的MSbuild主腳本」,因爲這是一個我以前不需要太多介入的工具。 –