ASP.NET 先行編譯概觀
更新:2007 年 11 月
ASP.NET 可以在供使用者瀏覽之前,先行編譯網站。這麼做可提供許多好處,包括更快的回應時間、錯誤檢查、原始碼保護,與更有效率的部署。
您也可以使用 Web 應用程式專案模型來編譯專案。專案中的所有程式碼檔 (獨立 (Stand-Alone)、程式碼後置 (Code-Behind) 和類別檔) 都會編譯成單一組件並儲存在 Bin 目錄中。因為編譯過程會建立單一組件,所以您可以指定屬性,例如組件名稱和版本,如果您不想讓輸出組件位於 Bin 目錄中,也可以指定它的位置。如需詳細資訊,請參閱編譯 Web 應用程式專案。
這個主題包含:
案例
先行編譯功能
背景
程式碼範例
功能
先行編譯 ASP.NET 網站能夠提供下列優勢:
由於頁面和程式碼檔不需在第一次要求時編譯,因此使用者可得到更快的回應時間。這對於經常更新的大型網站特別有用。
使用者瀏覽網頁之前,識別編譯時期錯誤的方法。
不需原始程式碼,即可建立可以部署到實際執行伺服器已編譯網站版本的能力。
回到頁首
背景
根據預設,在使用者首次要求資源時 (例如要求網站的頁面),會動態編譯 ASP.NET Web 網頁和程式碼檔。在頁面與程式碼檔案初次編譯之後,就會快取編譯過的資源。因此,後續對相同頁面的要求就會非常有效率。
ASP.NET 也可以在供使用者瀏覽之前,先行編譯整個網站。ASP.NET 提供下列先行編譯網站的選項:
就地先行編譯網站。如果要增強效能和執行錯誤檢查,這個選項對現有的網站非常有用。
針對部署先行編譯網站。這個選項會建立可部署到實際執行伺服器的特殊輸出。
此外,您可以先行編譯網站,讓它成為唯讀或可更新的。以下章節提供更多關於各選項的詳細資訊。
就地先行編譯
您可以使用先行編譯來增強網站效率,特別是 ASP.NET Web 網頁和程式碼檔經常進行變更及增加的站台更是如此。因為在動態網站上,動態編譯新增及已變更之網頁所需的額外時間會影響使用者對網站品質的觀感。
當使用者要求網站頁面時,就地先行編譯網站會有效率地進行相同的編譯。因此,改善效能的主要方式是,第一次要求時不需編譯頁面。
當您執行就地先行編譯時,也會編譯所有的 ASP.NET 檔案類型(HTML 檔案、圖形檔和其他非 ASP.NET 靜態檔案則保持不變)。先行翻譯的程序會依照 ASP.NET 動態編譯和處理檔案間相依性的相同邏輯。在先行編譯期間,編譯器會對所有可執行的輸出建立組件 (Assembly),並將這些組件放置在 %SystemRoot%\Microsoft.NET\Framework\version\Temporary ASP.NET Files 資料夾下的特殊資料夾中。接著,ASP.NET 會完成資料夾中組件網頁的要求。
如果您再度先行翻譯該網站,只會編譯新增或已變更的檔案 (或者是與新增或已變更檔案有相依性的檔案)。因為編譯最佳化,即使在些微更新後編譯網站也是可行的。
針對部署先行編譯
先行編譯網站的另一種用處是產生網站可以部署到實際執行伺服器的可執行版本。針對部署先行編譯會建立配置格式的輸出,這些配置包括組件、組態資訊、網站資料夾資訊和靜態檔案 (例如 HTML 檔案和圖形)。
編譯網站之後,您可以使用工具部署實際執行伺服器的配置,這些工具包括 Windows XCopy 命令、FTP、Windows 安裝等等。一旦部署配置之後,此部署會像原網站一樣運作,且 ASP.NET 會完成配置中組件頁面的要求。
針對部署先行編譯網站,提供保護原始程式碼和其他智慧財產的方法。如需編譯器在針對部署進行編譯期間如何處理檔案的詳細資訊,請參閱本主題稍後的針對部署編譯網站期間的檔案處理。
您可用兩種方式針對部署先行編譯:只針對部署先行編譯,或針對部署和更新先行編譯。
只針對部署先行編譯
當您只針對部署先行編譯時,編譯器大部分會從通常在執行階段編譯的所有 ASP.NET 原始程式檔產生組件。這包括了頁面中的程式碼、.cs 和 .vb 類別檔案、其他程式碼檔及資源檔。編譯器會從輸出中移除所有的來源和標記。在產生的配置中,會對每個 .aspx 檔案產生編譯的檔案 (副檔名為 .compiled),這些檔案都包含指到該頁面之適當組件的指標。
若要變更網站 (包括頁面配置),您必須變更原始檔案、重新編譯站台,並重新部署配置。唯一的例外狀況是網站組態。您無需重新編譯網站,便可對實際執行伺服器上的 Web.config 檔案進行變更。
這個選項為 ASP.NET Web 網頁提供了最嚴密的保護,和最佳的啟始執行效率。
針對部署和更新先行編譯
當您針對部署和更新先行編譯時,編譯器會從所有的原始程式碼 (單一檔案頁面的程式碼例外) 以及其他通常會產生組件的檔案 (例如資源檔) 來產生組件。編譯器會將 .aspx 檔轉換為單一檔案,會使用編譯的程式碼後置模型並將檔案複製到配置。
這個選項可讓您在編譯後,有限制地變更網站中的 ASP.NET Web 網頁。例如,您可以變更控制項、顏色、字形及其他頁面外觀的安排。也可以加入控制項,只要它們不需要事件處理常式或其他程式碼。
網站第一次執行時,ASP.NET 會執行進一步的編譯,以便從標記中建立輸出。
注意事項: |
---|
先行編譯的可更新網站並不允許有多個網頁參考同一個 CodeFile 類別。 |
先行編譯決策矩陣
請使用下表來協助您決定要使用的編譯模型。下表列出的某些選項稍後將於本主題介紹。
目標 |
編譯模型 |
---|---|
快速開發應用程式,而不用擔心程式碼編譯的問題。 |
使用預設編譯 (無先行編譯)。 |
改善對網站第一個頁面要求的回應時間。 |
使用就地先行編譯或其中一個部署編譯選項。 |
區隔原始程式碼和使用者介面 (UI) 程式碼。 |
使用先行編譯搭配可更新的 UI。 |
修改 UI 程式碼,但不變更原始程式碼。 |
使用先行編譯搭配可更新的 UI。 |
從實際執行伺服器移除所有原始程式碼和 UI 程式碼。 |
使用先行編譯搭配不可更新的 UI。 |
透過取代特定組件來更新應用程式。 |
使用先行編譯搭配固定的名稱。 |
透過使用強式名稱的組件來提升應用程式的安全性。 |
使用先行編譯搭配簽署的組件。 |
執行先行編譯
您可以在命令列上使用 Aspnet_compiler.exe 工具,先行編譯網站。如需詳細資訊,請參閱 HOW TO:先行編譯 ASP.NET 網站以便部署和ASP.NET 編譯工具 (Aspnet_compiler.exe)。Visual Studio 同時包含可從 IDE 先行編譯網站的命令。
注意事項: |
---|
先行編譯網站只會編譯該網站,不包括任何子網站。如果網站包含 IIS 中標記為應用程式的子資料夾,當您先行編譯上層資料夾時,不會編譯子應用程式。 |
您先行編譯網站時的一項程式撰寫限制適用於您想要以啟用原始檔保護方式編譯的網站。基底網頁類別 (程式碼後置類別) 有可能使用完整的類別名稱參考關聯的網頁類別 (.aspx 檔案) 和網頁類別成員,但如果您是以啟用原始檔保護方式先行編譯網站時,這種參考便無法運作。這是因為來自程式碼後置檔案的基底網頁類別不是在和衍生自 .aspx 網頁的網頁類別一樣的組件中。如需以啟用原始檔保護方式先行編譯的詳細資訊,請參閱 HOW TO:為先行編譯的網站簽署組件。
預設編譯
您不用手動編譯 ASP.NET 應用程式。根據預設,當 Web 瀏覽器首次要求應用程式中的頁面時,ASP.NET 將會編譯 Web 應用程式。如果您對應用程式中的檔案進行變更,下次要求頁面時,ASP.NET 執行階段將會判斷已變更之檔案的相依性,並僅重新編譯受到變更影響的檔案。
優點
使用預設編譯的優點包括:
使用簡單。ASP.NET 編譯器會為您完成所有工作。
先行編譯網站所需的其他步驟降低開發程序的速度時,這個編譯模型就是在開發期間最佳的選擇。
缺點
使用預設編譯的缺點包括:
首次要求網站時,可能會造成明顯的延遲。
要求您將原始程式碼檔儲存在實際執行伺服器上。
對伺服器上的網站目錄具有檔案系統存取權的任何人都可以使用原始程式碼和 UI 程式碼。
使用預設編譯的時機
請在下列情況下使用預設編譯:
當您要開發並測試網站時。
若為具有主要靜態資訊的網站。
若為不常變更的網站。
當您不擔心將原始程式碼檔儲存在實際執行伺服器上時。
就地編譯
您可以先行編譯已位於實際執行伺服器的網站。這就是所謂的就地編譯。如果您對應用程式中的檔案進行變更,就可以使用 ASP.NET 編譯工具來重新編譯受影響的檔案,而受影響的檔案則會在下次從應用程式要求頁面時重新編譯。
如需此編譯模型的詳細資訊,請參閱 HOW TO:先行編譯 ASP.NET 網站。
優點
使用就地編譯的優點包括:
減少從網站進行首次要求的回應時間。
不需任何其他特殊的部署步驟,應用程式經過編譯後,就好像從網站要求某個頁面一樣。
缺點
使用就地編譯的缺點包括:
應用程式的所有原始程式碼都必須儲存在實際執行伺服器上。
具有網站目錄存取權的任何使用者,都可以使用原始程式碼和 UI 程式碼。
使用就地編譯的時機
請在下列情況下使用就地編譯:
您經常對網站上的頁面進行變更。
您不擔心將原始程式碼檔儲存在實際執行伺服器上。
您想要改善第一個頁面要求的回應時間。
使用可更新的 UI 先行編譯
您可以透過使用 ASP.NET 編譯工具的 -u 參數,將原始程式碼 (.cs、.vb 檔及 .resource 檔) 編譯成 DLL。並保留 .aspx 檔中的 UI 標記,以便用於更新。將網站部署至實際執行伺服器後,就可以變更 .aspx 程式碼,而不需要重新編譯整個網站。
如需此編譯方法的詳細資訊,請參閱 HOW TO:先行編譯 ASP.NET 網站以便部署。
優點
先行編譯具有可更新 UI 之網站的優點包括:
減少從網站進行首次要求的回應時間。
使用者介面設計人員可以修改網站的外觀和行為,而不需要重新編譯整個網站。
對於應用程式原始程式碼中的智慧財產提供一種保護方法,使其受到保護,防止對網站目錄具有檔案系統存取權的任何人隨意查看。
缺點
先行編譯具有可更新 UI 之網站的缺點包括:
需要進行個別的編譯步驟,然後才能部署至實際執行伺服器。
對網站目錄具有存取權的任何人都可以使用應用程式 UI (.aspx 檔) 中的智慧財產。
如果 CodeFile 類別 (Class) 是使用程式碼後置模型之網頁的關聯程式碼檔案,則多個網頁無法參考此同一類別。
使用可更新 UI 先行編譯的時機
請在下列情況下先行編譯應用程式使具有可更新的 UI:
設計人員與原始程式碼開發人員分別獨立作業。
程式的原始程式碼包含您不想要他人隨意查看的智慧財產。
您不想要將程式的原始程式碼儲存在實際執行伺服器上。
使用不可更新的 UI 先行編譯
ASP.NET 編譯工具可以將應用程式的所有原始程式碼編譯成 DLL,以便部署於應用程式的 Bin 目錄中。其中包含 UI 檔案,例如 .aspx 和 .ascx 檔。
如需此編譯方法的詳細資訊,請參閱 HOW TO:先行編譯 ASP.NET 網站以便部署。
優點
使用不可更新 UI 先行編譯的優點包括:
減少從網站進行首次要求的回應時間。
對於應用程式原始程式碼與 UI 程式碼中的智慧財產提供一種保護方法,使其受到保護,防止對網站目錄具有存取權的任何人隨意查看。
缺點
使用不可更新 UI 先行編譯的缺點包括:
需要進行個別的編譯步驟,然後才能部署至實際執行伺服器。
即使是對應用程式的 UI 進行小幅變更時,也需要重新編譯整個網站。
使用不可更新 UI 先行編譯的時機
請在下列情況下先行編譯網站使具有不可更新的 UI:
UI 程式碼含有智慧財產,而且您想要加以保護並防止隨意查看。
您不需要常常變更 UI。
您只想要讓已編譯的 DLL 儲存在實際執行伺服器上。
先行編譯成固定名稱的組件
ASP.NET 編譯工具使用編譯期間所產生的隨機名稱為組件命名,因此每次重新編譯應用程式時,組件的名稱就會變更。
由於組件名稱變更,所以您必須重新部署整個應用程式,以便服務單一組件。但是,透過使用 ASP.NET 編譯工具的 -fixednames 參數,您便能為應用程式中的每個頁面建立一個組件。組件的名稱不會在後續的編譯程序中變更。所以,您可以建立應用程式的版本更新服務,只取代變更的組件。
由於使用 -fixednames 參數會為每個頁面建立個別的組件,所以您應該限制應用程式中的頁面數目。
如需此先行編譯方法的詳細資訊,請參閱 HOW TO:使用 ASP.NET 編譯工具產生固定名稱。
優點
先行編譯成固定名稱組件的優點包括:
每個組件的名稱不會隨著編譯而變更,這麼做可讓您取代特定組件,而不需要重新部署整個應用程式。
可更加注重應用程式的次要更新。
缺點
先行編譯成固定名稱組件的缺點包括:
- 應用程式中的每個頁面都會建立一個組件。這樣可能會為含有許多頁面的網站建立很多的組件。
先行編譯成固定名稱組件的時機
請在下列情況下將您的網站先行編譯成固定名稱的組件:
- 您必須服務 Web 應用程式,但不想要取代整個應用程式。
先行編譯成簽署的組件
您可以使用 ASP.NET 編譯工具來建立強式名稱的組件,而這些組件可以部署至伺服器的全域組件快取 (Global Assembly Cache,GAC) 或應用程式的 Bin 目錄中。簽署的組件會讓惡意使用者更難以將應用程式的組件取代成惡意程式碼。
如需此編譯方法的詳細資訊,請參閱 HOW TO:為先行編譯的網站簽署組件。
優點
先行編譯成簽署組件的優點包括:
- 簽署的組件會提升應用程式的安全性,讓您的組件更難以被惡意程式碼所取代。
缺點
先行編譯成簽署組件的缺點包括:
共用開發環境中的金鑰管理可能會很複雜。
組件必須具有將由 ASP.NET 執行階段所呼叫的 AllowPartiallyTrustedCallersAttribute 屬性 (Attribute)。
先行編譯成簽署組件的時機
請在下列情況下將您的網站先行編譯成簽署的組件:
使用者具有應用程式目錄或 GAC 的存取權,而且他們可以取代應用程式的組件。
您想要將協力廠商的能力限制為取代應用程式程式碼所產生的組件。
寫入先行編譯輸出
先行編譯處理序完成時,產生的輸出會寫入您指定的資料夾中。您可以將輸出寫入檔案系統中可使用檔案傳輸通訊協定 (File Transfer Protocol,FTP) 或 HTTP 存取的任何資料夾。您必須具有適當的使用權限,才能寫入目標站台。
注意事項: |
---|
發行處理序只會部署網站資料夾和子資料夾中的檔案,但是不會部署 Machine.config 檔案。因此,目標 Web 伺服器的組態可能與電腦上的組態不同,而這樣可能會影響應用程式的行為。 |
您可以在開發用伺服器 (Staging Server) 或實際執行伺服器上指定目標資料夾,或將輸出寫入本機電腦上的資料夾。如果在實際執行伺服器上指定資料夾,您就可以在同一個步驟中進行先行編譯和部署。如果將輸出寫入不屬於網站一部分的資料夾,則可以在不同的步驟中將輸出複製到伺服器。
注意事項: |
---|
如果使用 Visual Studio 開啟先行編譯的網站,就無法建置網站。建置選項將會關閉。若要變更網站,建議您編輯原始網站中的檔案、先行編譯網站,然後再加以發行。 |
編譯處理序的輸出包括對任何程式碼或頁面編譯的組件。如果您選取的選項允許更新先行編譯的網站,.aspx、.asmx 和 .ashx 檔案的任何程式碼後置類別都會編譯至組件。但是,.aspx、.asmx 和 .ashx 檔案本身都會以原樣複製到目標資料夾,這樣您就可以在部署網站後變更這些檔案的配置。若是可以更新之先行編譯的網站,單一檔案頁面中的程式碼就不會編譯至組件,不過會部署為原始程式碼。
靜態檔案並不會進行編譯。但是,靜態檔案會以原樣複製到輸出資料夾。靜態檔案包括圖形、.htm 或 .html 檔案、文字檔等等。如需詳細資訊,請參閱稍後於本主題介紹的針對部署編譯網站期間的檔案處理。
如果在先行編譯期間發生錯誤,會在 [輸出] 視窗和 [錯誤清單] 視窗中向您報告錯誤。先行編譯期間發生的錯誤將會阻礙編譯和發行站台的進行。
ASP.NET 先行編譯期間的檔案處理
先行編譯部署用的站台時,ASP.NET 會建立配置,該配置為包含編譯器輸出的結構。本節說明在先行編譯過程中處理檔案的方式,以及說明配置結構和內容。
您可以先行編譯原始程式碼 (任何可以產生組件的檔案,包含程式碼和資源) 和標記 ( .aspx 檔案),或只編譯原始程式碼。
編譯的檔案
先行編譯處理序 (Process) 會在 ASP.NET Web 應用程式中對各種檔案類型執行作業。根據應用程式是否只為了部署而先行編譯或是為了部署和更新而先行編譯,處理檔案的方式會有所不同。
注意事項: |
---|
只針對部署或針對部署並更新,對網站進行先行編譯並不會保留目標檔案和子資料夾上的檔案存取控制清單 (ACL)。例如,假如您先前已對網站進行先行編譯並將它部署到目標位置,接著變更了檔案的 ACL,然後再次對網站進行先行編譯並部署,那麼對 ACL 所做的變更將會遺失。 |
下表描述不同的檔案類型,以及當應用程式只針對部署而先行編譯時所採取的動作。
檔案類型 |
先行編譯動作 |
輸出位置 |
---|---|---|
.aspx、ascx、.master |
產生組件 (Assembly) 和會指向此組件的 .compiled 檔案。不變動原始檔案,以做為完成要求的替代符號。 |
組件和 .compiled 檔案會寫入 [Bin] 資料夾。網頁 (移除內容的 .aspx 檔) 置留於其原始位置。 |
.asmx、.ashx |
產生組件。不變動原始檔案,以做為完成要求的替代符號。 |
[Bin] 資料夾 |
[App_Code] 資料夾中的檔案 |
產生一個或多個組件 (需視 Web.config 設定而定)。
注意事項:
[App_Code] 資料夾中的靜態內容不會複製到目標資料夾。
|
[Bin] 資料夾 |
.cs 或 .vb 檔案不在 App_Code 資料夾中 |
使用頁面或是取決於頁面的資源編譯。 |
[Bin] 資料夾 |
[Bin] 資料夾中現有的 .dll 檔案。 |
複製目前的檔案。 |
[Bin] 資料夾 |
資源 (.resx) 檔案 |
針對在 App_LocalResources 或 App_GlobalResources 資料夾中找到的 .resx 檔案,產生一個或多個組件和文化特性 (Culture) 結構。 |
[Bin] 資料夾 |
App_Themes 資料夾和子資料夾中的檔案 |
在目標中產生組件和會指向組件的 .compiled 檔案。 |
Bin |
靜態檔案 (.htm、.html、.js 和圖形檔等等) |
複製目前的檔案。 |
與來源結構相同。 |
瀏覽器定義檔案 |
複製目前的檔案。
注意事項:
瀏覽器資訊繼承自電腦層級的組態檔,因此可能在目標伺服器上有不同的行為方式。
|
App_Browsers |
相依專案 |
產生相依專案的輸出到組件中。 |
[Bin] 資料夾 |
Web.config 檔案 |
複製目前的檔案。 |
與來源結構相同。 |
Global.asax 檔案 |
產生組件。 |
[Bin] 資料夾 |
下表描述不同的檔案類型,以及當應用程式針對部署和更新而先行編譯時所採取的動作。
檔案類型 |
先行編譯動作 |
輸出位置 |
---|---|---|
.aspx、ascx、.master |
針對具有程式碼後置 (Code-Behind) 類別檔的檔案產生組件,以及會指向組件的 .compiled 檔案。複製這些檔案的單一檔案版本到目標中。 |
組件和 .compiled 檔案會寫入 [Bin 資料夾]。 |
.asmx、.ashx |
複製未經編譯的檔案。 |
與來源結構相同。 |
[App_Code] 資料夾中的檔案 |
產生一個或多個組件 (需視 Web.config 設定而定)。
注意事項:
[App_Code] 資料夾中的靜態內容不會複製到目標資料夾。
|
[Bin] 資料夾 |
.cs 或 .vb 檔案不在 App_Code 資料夾中 |
使用頁面或是取決於頁面的資源編譯。 |
[Bin] 資料夾 |
[Bin] 資料夾中現有的 .dll 檔案。 |
複製目前的檔案。 |
[Bin] 資料夾 |
資源 (.resx) 檔案 |
針對 App_GlobalResources 資料夾中的 .resx 檔案,產生一個或多個組件和文化特性 (Culture) 結構。 對於 App_LocalResources 資料夾中的 .resx 檔案,將目前的檔案複製到輸出位置的 App_LocalResources 資料夾。 |
組件會放在 [Bin] 資料夾中 |
App_Themes 資料夾和子資料夾中的檔案 |
複製目前的檔案。 |
與來源結構相同。 |
靜態檔案 (.htm、.html、.js 和圖形檔等等) |
複製目前的檔案。 |
與來源結構相同。 |
瀏覽器定義檔案 |
複製目前的檔案。
注意事項:
瀏覽器資訊繼承自電腦層級的組態檔,因此可能在目標伺服器上有不同的行為方式。
|
App_Browsers |
相依專案 |
產生相依專案的輸出到組件中。 |
[Bin] 資料夾 |
Web.config 檔案 |
複製目前的檔案。 |
與來源結構相同。 |
Global.asax 檔案 |
產生組件。 |
[Bin] 資料夾 |
.compiled 檔案
對於 ASP.NET Web 應用程式中的可執行檔,編譯器會將 .compiled 副檔名加入至組件和檔案的名稱中。編譯器會產生組件名稱。.compiled 檔案不包含可執行的程式碼。相反地,它只包括讓 ASP.NET 找到適當組件的必要資訊。
在部署已先行編譯的應用程式之後,ASP.NET 會使用 [Bin] 資料夾中的組件來處理要求。先行編譯輸出會包含 .aspx 或 .asmx 檔案做為頁面的替代符號 (Placeholder)。替代符號檔案不包含程式碼。它們存在的目的是為了針對特定頁面要求而叫用 ASP.NET,預留位置檔案同時提供一種方法,讓您設定檔案權限來限制頁面的存取。
更新先行編譯的網站
部署先行編譯的網站之後,您可以有限制地變更網站中的檔案。下表說明不同類型變更的效果。
檔案類型 |
允許變更 (只限部署) |
允許變更 (部署和更新) |
---|---|---|
靜態檔案 (.htm、.html、.js 和圖形檔等等) |
可變更、移除和增加靜態檔案如果 ASP.NET Web 網頁參考已變更或已移除的頁面或頁面項目,則可能會發生錯誤。 |
可變更、移除和增加靜態檔案如果 ASP.NET Web 網頁參考已變更或已移除的頁面或頁面項目,則可能會發生錯誤。 |
.aspx 檔案 |
不允許變更現有的頁面。不允許加入新的 .aspx 檔案。 |
您可以變更 .aspx 檔案的配置,並且加入不需程式碼的項目,例如不包含事件處理常式的 HTML 項目和 ASP.NET 伺服器控制項。您也可以加入新的 .aspx 檔案,這些檔案在第一次要求時會執行編譯。 |
.skin 檔案 |
忽略變更和新的 .skin 檔案。 |
允許變更和新增 .skin 檔案。 |
Web.config 檔案 |
允許影響 .aspx 檔案編譯的變更。忽略除錯或批次處理的編譯選項。 不允許變更設定檔屬性或提供者項目。 |
只有當變更不影響網站或網頁編譯時,才允許變更,包括編譯器設定、信任層級與全球化。影響編譯的變更或者會改變編譯頁面中之行為的變更會被忽略,或是可能會產生錯誤。允許其他變更。 |
瀏覽器定義 |
允許變更和新增檔案。 |
允許變更和新增檔案。 |
從資源 (.resx) 檔案編譯的組件 |
全域和本機資源都可以加入新的資源組件檔案。 |
全域和本機資源都可以加入新的資源組件檔案。 |
程式碼範例
回到頁首
請參閱
參考
ASP.NET 編譯工具 (Aspnet_compiler.exe)
回到頁首