2009-04-21 63 views
8

我目前參與了一個ASP.NET項目,解決方案中包含約40個項目。我們正在克隆虛擬PC環境中進行所有開發,因此所有開發人員都有相同的設置。這很好,管理依賴關係很簡單,但是構建解決方案的速度非常慢。虛擬PC只能使用一個CPU,所以我實際上只使用了一半的計算機資源。加快ASP.NET中的構建時間

從構建到完整的頁面加載需要3分鐘的時間。隨着項目的增長,它每天都變得越來越糟糕。修復簡單的事情開始需要很長時間和個人,因爲我在計算機編譯時無法正常工作,所以我一直感到沮喪。

是否有任何方式將我的構建分佈在多臺計算機上以加速構建過程?

固態硬盤在構建時間方面會有明顯改善嗎?

有沒有其他的方式來加速構建?

注意:我試圖預編譯靜態依賴與NGEN但後來讀了ASP.NET不支持NGEN。我使用Visual Studio 2008,虛擬環境中沒有防病毒軟件。

+1

構建時間慢了,還是ASP.NET需要很長時間才能啓動第一頁? – edosoft 2009-04-21 09:37:59

+0

這兩個,大約2/3構建和1/3 ASP.NET – zidar 2009-04-21 10:02:32

回答

3

您是否需要每次重建所有40個項目?

您可以配置在解決方案配置設置中內置的內容。

I.e.如果您所做的更改僅在您的WebUI項目中進行,而其他39個項目未更改,則可以創建僅配置了Web應用程序的構建配置。

  • 看看配置下拉
  • 點擊「配置管理」
  • 在「活動解決方案配置」下拉菜單點擊「新建」
  • 創建一個從調試配置
  • 複製一個新的配置
  • 在您的新配置中,取消選中除了您所做的更改之外的所有項目構建
+1

如果在較低的項目中沒有任何變化,msbuild足夠聰明,意識到沒有任何變化,並且不重建它們。 當您對要重新編譯的文件進行更改時,它將重新編譯自身及其所有依賴項。 – 2009-04-21 09:31:42

+0

但是,我怎麼知道我不打算構建那些不構建的項目? – zidar 2009-04-21 10:07:39

+0

您只在您的依賴鏈中創建項目「上方」項目中進行更改... 如果您有39個DLL項目,這些項目在您的Web App中引用,並且您只更改了您的Web應用程序,不會破壞任何東西。 – 2009-04-21 10:11:55

1

您沒有提及您的Visual St音頻版本,但如果是2005年的話,你可能會考慮升級到2008年。在我的情況下,這減少了大型(30+項目)解決方案的構建時間。

另一種選擇是預先構建一些不再改變的庫並引用編譯後的dll而不是項目。

+0

我使用VS 2008. Prebuilding並沒有真正幫助那麼多,因爲我們不再改變的唯一項目很小,而且可能建立得非常快。 – zidar 2009-04-21 10:04:48

1

我們也有類似的情況,我發現我們的虛擬機受到嚴重限制,儘管它們每個都運行在單個CPU上,但它們不能完全利用該CPU。我設法讓一個物理上運行的3個虛擬機運行速度提高100%。


我也想看看試圖減少您的項目數量。我們的主要解決方案有40個項目,並且我一直在慢慢整合這些項目,並確保新項目儘可能適合現有項目。導致這種情況的主要原因是web服務,每個服務最初都是在單獨的項目中創建的。我現在將所有新的Web服務添加到一個項目中,並慢慢地將其他項目移到其他項目中。

1

您也可以考慮切換到使用多個處理器的VMware Workstation。我目前正在使用帶有兩個雙處理器虛擬機的設置,並且所有四臺虛擬機都可以使用。

2

不要在您的解決方案中放置這麼多項目。代碼在不同的進程或不同的機器上運行時,只能創建一個新項目。在大多數情況下創建這麼多項目沒有用處。項目的數量是msbuild中最顯着的減速。

1

我們在我們公司做的是使用文件參考,所以只需要修改項目,在任何時候我的解決方案中不會有超過10個項目,大部分是2到3個。

我們還爲每次簽到建立我們的行李箱,併爲開發人員提供批處理文件以提取最近的dll。

當然,這並不能阻止痛苦的裝配參考錯誤的發生,但它們在一段時間後會變得比討厭的問題更令人討厭。

6

可以極大地通過執行以下操作減少您等待構建與ASP.NET時間:

  • 使用新的「optimizeCompilations」標誌。它會告訴.NET不要僅僅因爲您更改了一個項目/ dll而重建整個項目。如果你有40個項目,並且你不使用它,每次你在一個項目中改變一個簡單的方法,.NET就會嘗試編譯所有其他的項目和dll。使用新標誌(加上修補程序的安裝),您將在開發過程中看到很多提高的整體性能。查看這篇博客文章,詳細介紹如何使用這個優化編譯標誌加速構建:http://www.wagnerdanda.me/2009/11/optimizing-asp-net-build-time-with-dynamic-compilation-and-optimizecompilations/

希望它有幫助!

瓦格納丹達席爾瓦