ASP.NET Web 應用程式專案先行編譯概觀
根據預設,Web 應用程式專案中的程式碼檔可藉由使用 Microsoft Build Engine (MSBuild) 而先行編譯成單一組件。 ASP.NET Web 網頁 (.aspx)、使用者控制項 (.ascx) 及 MVC Razor 檢視 (.cshtml and .vbhtml) 則會由 ASP.NET 編譯器在伺服器上進行動態編譯。 您還可以選擇先行編譯網頁、使用者控制項及 Razor 檢視。
注意事項 |
---|
此主題只適用於 Web 應用程式專案。如需 Web 應用程式專案和網站專案間之差異的詳細資訊,請參閱 Visual Studio 中 Web 應用程式專案和網站專案的比較。如需如何先行編譯網站專案的詳細資訊,請參閱 ASP.NET Web Site Project Precompilation Overview。 |
編譯模型
專案中的所有程式碼檔 (獨立 (Stand-Alone)、程式碼後置 (Code-Behind) 和設計工具類別檔) 都會先行編譯成單一組件, 依預設這種組件會建置及保存在 Bin 資料夾中。 因為這個編譯模型會建立單一組件,所以您可以指定屬性,例如組件名稱和版本, 並同時指定輸出組件的位置。 若要變更輸出組件的位置,請在 [方案總管] 中以滑鼠右鍵按一下專案名稱,再按一下 [屬性],然後按一下 [建置] 索引標籤。 在 [建置] 索引標籤上名為 [輸出路徑] 的欄位中,指定輸出組件的路徑。
Web 應用程式專案是由專案檔所定義,而不是專案資料夾,後者是用來定義網站專案。 此專案檔會參考專案中所含的檔案,並包含組件參考和其他專案中繼資料設定。 包含在專案資料夾中但並未在專案檔中定義的檔案,不會編譯為 Web 應用程式專案的一部分。 在每個專案所產生的專案檔 (.*proj) 中,都會參考透過 Visual Studio 或 Visual Web Developer Express加入和變更的專案設定。
若要執行和偵錯網頁,必須編譯完整的 Web 應用程式專案。 但是,建置完整 Web 應用程式專案需要的時間可能很短,因為 Visual Studio 和 Visual Web Developer Express 都會使用累加建置模型,該模型只會建置變更的檔案。
如需詳細資訊,請參閱 Web Application Projects Overview。
編譯類別檔
Web 應用程式專案會使用 MSBuild 編譯類別檔。 這些類別檔會編譯成單一組件, 並依預設放在 Bin 資料夾中。 您可以使用標準的 MSBuild 擴充性規則來擴充及自訂編譯處理序。 如需詳細資訊,請參閱 MSBuild。
下表描述編譯成單一組件的 Web 應用程式專案類別檔的類型。
類別檔類型 |
說明 |
---|---|
獨立 |
可以建立並加入 Bin 資料夾的類別檔。 |
程式碼後置 |
使用者定義的程式碼,可定義 ASP.NET 網頁中的顯示和其他行為。 |
設計工具 |
自動產生的程式碼。 您不應該修改 .designer 檔案。 |
自訂編譯選項
您可以使用 [專案設計工具] 視窗裡的 [應用程式] 屬性頁項目,指定輸出組件的名稱、版本以及其他詳細資料。 請使用 [專案設計工具] 視窗中的 [建置] 頁面,指定專案的組建組態。 例如,您可以指定錯誤的處理方式,並指定與組件輸出相關的詳細資料。 此外,您也可以設定 [建置事件] 屬性頁的值,藉此加入編譯期間的建置前和建置後步驟。 如需屬性頁的詳細資訊,請參閱專案設計工具使用者介面參考。
設定建置動作屬性
根據預設,MSBuild 只會在 [建置動作] 屬性設定為 [編譯] 時,才編譯 Web 應用程式專案的類別檔。 不過,如果類別檔是位在 Web 應用程式專案的 App_Code 資料夾中,則這些類別檔也會由 ASP.NET 進行編譯, 即使其建置動作並未明確設為 [編譯],仍會執行此動作。
注意事項 |
---|
網站專案會有 App_Code 資料夾。這個資料夾一般並不會包含在 Web 應用程式專案中。如需 App_Code 資料夾的詳細資訊,請參閱 Shared Code Folders in ASP.NET Web Sites。 |
動態編譯
雖然專案中的程式碼檔會使用 MSBuild先行編譯為單一組件,但是 Web 應用程式專案的 ASP.NET Web 網頁 (.aspx)、使用者控制項 (.ascx) 及 MVC Razor 檢視 (.cshtml 和 .vbhtml) 都會在伺服器上由 ASP.NET 編譯器進行動態編譯。 這表示,您可以在編譯及部署 ASP.NET 網頁、使用者控制及 Razor 檢視之後,在網站中對這些網頁進行有限的變更。 例如,您可以變更控制項、顏色、字形及其他頁面外觀的安排。 當網站在您進行這類變更之後收到其第一個網頁要求時,ASP.NET 會重新編譯變更的檔案。
只要您將控制項設定成 protected 或 public,就可以在程式碼後置檔案中定義該控制項。 因為 .aspx 網頁繼承自程式碼後置檔案,所以此網頁會使用該控制項。 在下列情況下,將控制項的定義移到程式碼後置檔案很有用:
當控制項的型別必須衍生自內建 ASP.NET 型別時。
當想要控制項具有預設範圍以外的範圍時。 範圍是指存取範圍層級,例如 public、private、internal、protected 和 protected internal。
當您想要將中繼資料屬性加入控制項的宣告時。
當您想要針對控制項的宣告撰寫 XML 程式碼註解時。
如需如何加入控制項的詳細資訊,請參閱 How to: Add Controls to an ASP.NET Web Page Programmatically。
部署
根據預設,所有的類別檔都會編譯成單一組件,這表示只有該組件必須與 .aspx、.ascx、.cshtml 及 .vbhtml 檔案及靜態內容檔案一起部署。 在這個案例中,要等到瀏覽器要求此頁時,.aspx、.ascx、.cshtml 及 .vbhtml 檔案中的標記才會編譯成可執行的程式碼。
但是,您可以指定不同的編譯和合併選項。 例如,您可以先行編譯 .aspx 檔,或者指定應建立多個組件,而不是只建立一個組件。 如需 Web 應用程式專案編譯和合併選項以及如何指定它們的資訊,請參閱下列資源:
如需如何部署 Web 應用程式專案的詳細資訊,請參閱 Visual Studio 及 ASP.NET 的 Web 部署內容對應。
請參閱
概念
Visual Studio 及 ASP.NET 的 Web 部署內容對應
Visual Studio 中 Web 應用程式專案和網站專案的比較