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

Aa983464.collapse_all(zh-tw,VS.110).gif編譯類別檔

Web 應用程式專案會使用 MSBuild 編譯類別檔。 這些類別檔會編譯成單一組件, 並依預設放在 Bin 資料夾中。 您可以使用標準的 MSBuild 擴充性規則來擴充及自訂編譯處理序。 如需詳細資訊,請參閱 MSBuild

下表描述編譯成單一組件的 Web 應用程式專案類別檔的類型。

類別檔類型

說明

獨立

可以建立並加入 Bin 資料夾的類別檔。

程式碼後置

使用者定義的程式碼,可定義 ASP.NET 網頁中的顯示和其他行為。

設計工具

自動產生的程式碼。 您不應該修改 .designer 檔案。

Aa983464.collapse_all(zh-tw,VS.110).gif自訂編譯選項

您可以使用 [專案設計工具] 視窗裡的 [應用程式] 屬性頁項目,指定輸出組件的名稱、版本以及其他詳細資料。 請使用 [專案設計工具] 視窗中的 [建置] 頁面,指定專案的組建組態。 例如,您可以指定錯誤的處理方式,並指定與組件輸出相關的詳細資料。 此外,您也可以設定 [建置事件] 屬性頁的值,藉此加入編譯期間的建置前和建置後步驟。 如需屬性頁的詳細資訊,請參閱專案設計工具使用者介面參考

設定建置動作屬性

根據預設,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 應用程式專案和網站專案的比較

其他資源

MSBuild