共用方式為


ASP.NET 編譯概觀

更新:2007 年 11 月

為了讓應用程式程式碼可以服務使用者的要求,ASP.NET 必須先將程式碼編譯為一或多個組件。組件為具有 .dll 副檔名的檔案。您可以使用不同的語言撰寫 ASP.NET 程式碼,例如 Visual Basic、C#、J# 等等。編譯程式碼時,就會轉譯為和語言及 CPU 無關的表示,即為 Microsoft Intermediate Language (MSIL)。在執行階段,MSIL 會在 .NET Framework 內容中執行,針對執行應用程式之電腦上的處理器,將 MSIL 轉譯為 CPU 特定的指令。

編譯應用程式程式碼的眾多好處包含:

  • 效能:編譯的程式碼會比指令碼語言 (例如 ECMAScript 或 VBScript) 快,因為它的表示比較接近機器碼 (Machine Code),而且不需要額外的剖析。

  • 安全性:編譯的程式碼比未編譯的原始程式碼更難進行反向工程,因為它缺乏高階語言的可讀性和抽象。此外,有些混亂的工具會讓編譯程式碼更難進行反向工程。

  • 穩定性:會在編譯時期檢查程式碼的語法錯誤、型別安全 (Type Safety) 和其他問題。在建置階段擷取這些錯誤,就可以減少程式碼的許多錯誤。

  • 互通性:因為 MSIL 程式碼支援任何.NET 語言,您可以在程式碼中使用原本以其他語言撰寫的組件。例如,如果以 C# 撰寫 ASP.NET Web 網頁,則可以將參考加入至以 Visual Basic 撰寫的 .dll 檔案中。

ASP.NET 編譯架構包括了許多下列功能:

  • 多重語言支援。

  • 自動編譯。

  • 彈性部署。

  • 可延伸的建置系統。

下列各節會逐項說明這些功能。

多重語言支援

在 ASP.NET 2.0 中,您可以在同一個應用程式中使用不同的語言 (例如 Visual Basic 和 C#),因為 ASP.NET 會為每種語言建立多個組件。針對存放在 App_Code 資料夾中的程式碼,您可以對每個語言指定子資料夾。如需 App_Code 資料夾的詳細資訊,請參閱 ASP.NET 網站中的共用程式碼資料夾

自動編譯

當使用者第一次要求網站的資源時,ASP.NET 會自動編譯您的應用程式程式碼和所有的相關資源。一般而言,ASP.NET 會為每個應用程式目錄 (例如 App_Code) 建立組件,也會為主目錄建立一個組件(如果目錄中的檔案是以不同的程式設計語言所撰寫,則會為每種語言建立不同的組件)。您可以指定哪些目錄可以編譯到 Web.config 檔之 Compilation 區段中的單一組件。

彈性部署

由於 ASP.NET 會在使用者第一次發出要求時編譯網站,您只要將應用程式的原始程式碼複製到實際執行 Web 伺服器即可。但是,ASP.NET 也會提供先行編譯選項讓您可以在部署網站前先進行編譯,或者在部署後使用者要求前編譯。先行編譯有一些優點。可以改進首次對網站提出要求時的效能,因為在 ASP.NET 編譯網站時不會有延遲時間。先行編譯也可以協助您找到可能只有當使用者要求頁面時才會發現的錯誤。最後,如果在部署網站前先行編譯,則可以部署組件取代原始程式碼。

您可以使用 the ASP.NET 編譯器 (Compiler) 工具 (ASPNET_Compiler.exe) 先行編譯網站。這個工具會提供下列先行編譯選項:

  • 就地編譯:這個選項會執行動態編譯期間發生的相同編譯動作。使用這個選項以編譯已部署至實際執行伺服器 (Production Server) 的網站。

  • 非可更新的完全先行編譯:使用這個選項編譯應用程式,然後將編譯的輸出複製到實際執行伺服器。所有的應用程式程式碼、標記和 UI 程式碼會編譯成組件。預留位置檔案 (例如 .aspx 頁面) 仍然存在,因此您可以執行諸如設定使用權限這類檔案特定的工作,但檔案還是不含可更新的程式碼。若要更新任何頁面或程式碼,您必須再次先行編譯網站並再次部署。

  • 可更新的先行編譯:這類似於不可更新的完全先行編譯,不同之處在於 UI 項目 (例如 .aspx 頁面和 .ascx 控制項) 會保留所有的標記、UI 程式碼和內嵌程式碼 (如果存在的話)。您可以在部署檔案之後更新其中的程式碼。ASP.NET 會偵測到檔案的變更並重新編譯檔案。請注意,程式碼後置(Code-Behind) 檔案 (.vb 或 .cs 檔案) 中的程式碼會在先行編譯期間建置到組件,因此,如果沒有再次進行先行編譯和部署步驟,則將無法變更檔案。

如需詳細資訊,請參閱 ASP.NET 先行編譯概觀

可延伸的建置系統

ASP.NET 使用 BuildProvider 類別建置項目,例如 .aspx 頁面、.ascx 檔案和全域資源。您可以建立繼承自 BuildProvider 類別的類別,即可擴充和自訂 ASP.NET 建置系統以編譯自訂資源。例如,您可以加入新檔案類型,然後撰寫建置該特定類型的 BuildProvider

請參閱

參考

compilation 項目 (ASP.NET 設定結構描述)