2011-08-24 120 views
1

Tip/Trick: Optimizing ASP.NET 2.0 Web Project Build Performance with VS 2005概述,Visual Studio網站項目中提供的「構建頁面」命令執行以下操作:運行等同於命令行「構建頁」爲Visual Studio網站項目命令

的解決方案將像以前一樣編譯所有的類庫項目,然後編譯/ app_code目錄和Global.asax文件,然後而不是重新驗證網站中的所有頁面,它只會驗證您正在處理的當前頁面,以及該頁面引用的任何用戶控件。

有沒有辦法從msbuild和/或命令行訪問此功能?

我設立一個大型的Visual Studio網站項目的自動構建(基於Kentico CMS),其中包括:

  • 大量CMS相關頁面和用戶控件我們做的不改變
  • 少量定製的,我們正在積極發展,都在網站內CMSWebParts /自定義目錄「Web部件」用戶控件

預編譯使用aspnet_compiler整個網站需要長達10分鐘,這太慢了w提交構建。理想情況下,我想介紹一個預編譯我們自定義代碼的步驟。請注意,我們實際上並未部署預編譯的輸出(不推薦用於Kentico網站),但此步驟僅用於驗證.ascx文件中的代碼。

回答

3

我已經發現,以減少預編譯時間,小的變化到大的網站,最好的辦法是使用ASP。網絡編譯工具(aspnet_compiler。exe)與就地編譯。

我們的構建腳本運行使用下面的命令工具:

aspnet_compiler.exe -v/-p C:\路徑\爲\ MyWebSite

此命令指定網站的物理路徑,但不會設置targetDir選項,這會導致應用程序就地編譯。

就地編譯的好處是,aspnet_compiler默認只會編譯自網站上次編譯以來發生更改的文件(可以強制它使用-c選項重新編譯所有內容)。例如,當我第一次對網站運行上述命令時,大約需要運行10分鐘。如果我然後更改單個文件並再次運行它,則只需要30秒左右。

您可能對編譯工具如何「知道」哪些文件已更改感到好奇。就地編譯不會修改正在編譯的應用程序,也就是說,您最終不會在Web應用程序的bin文件夾中生成像App_Web_xdqqvn5q.dll和default.aspx.cdcab7d2.compiled這樣的文件。輸出實際上是在「Temporary ASP.NET Files」文件夾中生成的。當您指定物理路徑(而不是IIS元數據庫)時,將使用您的配置文件中的文件夾,例如, C:\ Users \ your.name \ AppData \ Local \ Temp \ Temporary ASP.NET Files。您的Web應用程序源代碼與存儲在臨時ASP.NET文件中的數據進行交叉引用,以確定發生了什麼變化。

+0

那麼爲什麼會有人使用-c選項? – sfarbota

0

我想這可能是幫助你需要完成的任務:

http://msdn.microsoft.com/en-us/library/dd293881.aspx

從我讀你可以從Visual Studio命令提示符或從Windows運行構建命令提示符。

更新:

我找不到有關樓宇只有一個頁面,但使用aspnet_compiler 沒有 -c參數應加快編譯過程,因爲它只會重新編譯什麼改變了互聯網上的東西。如果只有自上次構建以來發生變化的內容是一個.aspx頁面的內容,那麼運行編譯器應該類似於構建頁面。

-c

指定要編譯的應用程序應該充分重建。 已編譯的組件將再次編譯。如果省略此 選項,則該工具僅構建應用程序 中自上次執行編譯以來已修改的那些部分。

aspnet_compiler用法此頁面上解釋道:

http://msdn.microsoft.com/en-us/library/ms229863.aspx

+0

你給了我一個ASP.Net命令行工具列表的鏈接......你能特別提出哪些可能有助於我試圖實現的東西嗎?謝謝。 –

+0

@Dan Malcolm:如何從命令提示符編譯網站的解釋如下:http://msdn.microsoft.com/en-us/library/ms229863.aspx有幾個例子。 –

+0

這是我正在尋找的「Build Page」命令的等價物(「解決方案將像之前一樣編譯所有類庫項目,然後編譯/ app_code目錄和Global.asax文件,驗證網站中的所有頁面,它只會驗證您正在處理的當前頁面以及頁面引用的任何用戶控件。「) –

相關問題