asp.net web 窗體的優勢之一就是增加動態編譯后,您可以很輕松地更改 .aspx 頁,保存更改時頁面將動態更新,而不需要重新編譯(只要不使用模塊化代碼)。但動態編譯并不是對每個應用程序都適合,而且第一次訪問某個應用程序時,動態編譯會導致瀏覽器的初始性能降低。另外,很多時候您可能希望部署一個沒有源代碼的應用程序。如果您遇到上述情況,您會更高興地了解到 asp.net whidbey 具有支持預編譯 web 站點的功能。asp.net whidbey 支持兩種預編譯模式:在位預編譯和部署預編譯。
在位預編譯
在位預編譯使您可以對 web 站點中的所有頁面進行手動批編譯。這也是用戶在您的應用程序中首次單擊某個頁面后發生的操作(前文提到的后一種情況除外),用戶只需坐下來等待批編譯完成。使用在位預編譯有兩個主要原因:首先,它可以避免第一次請求頁面時批編譯的性能降低;其次,它使您可以“先于”用戶發現編譯錯誤。
在位預編譯也很容易實現,只需瀏覽到 web 站點的根目錄,添加特定的處理程序名稱 precompile.axd(熟悉 asp.net 跟蹤功能的用戶會發現該名稱與 trace.axd 處理程序的名稱類似):
http://localhost/mywebsitename/precompile.axd
其中 mywebsitename 是您 web 站點的名稱。預編譯站點之后,對站點內頁面的請求也應隨即完成,而不會有任何編譯滯后。
部署預編譯
第二種預編譯模式使您可以創建整個 web 站點的可執行版本,部署這種版本不需要任何源代碼(包括 html 和其他靜態文件)。因此,部署預編譯可以防止別人隨意訪問由代碼表示的知識產權信息。生成的程序集和 stub 文件集可以通過 xcopy、ftp、windows 資源管理器等部署到生產服務器上。為了預編譯站點以進行部署,asp.net whidbey 提供了一個名為 aspnet_compiler.exe 的命令行實用程序。要在文件系統 web 站點上調用 asp.net 預編譯器,需要打開一個命令窗口,瀏覽到 .net framework 的安裝位置(/microsoft.net/framework/<版本>),然后輸入以下命令:
請注意,某些命令行選項要求 web 站點必須為有效的 microsoft® internet 信息服務 (iis) 應用程序才能正常工作。如果在 microsoft® windows 資源管理器中瀏覽至目標目錄,您會看到預編譯 web 站點后將生成一個包含 bin 目錄的站點,bin 目錄中包含一些程序集和描述性文件,以及大量與原始頁面同名的 stub 文件,但不包含代碼(包括 html 和可執行代碼)。如果瀏覽此站點,輸出與原始站點的輸出相同。請注意,不能在已進行部署預編譯的站點上使用在位預編譯,原因很簡單,因為它已經被預編譯過了。
intellisense 無處不在!
對于 visual studio .net 2002 和 2003,最令我頭痛的問題之一(相信很多開發人員也有同感)就是對 intellisense 和其他用于提高生產率的功能的支持不一致。希望在 html 視圖中將控件從工具箱中拖到頁面上嗎?還做不到。事實上,在 html 視圖中根本看不到工具箱的 web 窗體面板!要在 .aspx 頁面上寫入內嵌代碼而不是使用模塊化代碼?可以做到,但必須放棄 intellisense、拖放功能以及其他更多功能。最后,正如我最近在 msdn asp.net developer center 上發表的文章中提到的,在 visual studio .net 2002 或 2003 中獲得自定義控件的設計時支持需要跨越層層障礙,包括有點粗糙但奏效的 xsl 修改。
令人高興的是,asp.net whidbey 中實現了編譯模型的統一,所有這些問題也都迎刃而解。在 visual studio .net whidbey 中,可以寫入內嵌代碼或使用新的模塊化代碼模型,還能獲得控件拖放、intellisense 語句完成以及所有以前您希望使用卻因編碼方式局限而無法使用的那些可以提高生產率的功能。另外,對自定義服務器控件和 web 控件的設計時支持有了很大的改進,包括為源視圖(html 視圖在 visual studio .net whidbey 中的等效視圖)中的自定義控件增加了 intellisense 語句完成。
小結
asp.net whidbey 中對編譯模型的更改,以及 visual studio .net whidbey 中相應功能的改進無疑是一個巨大的飛躍,不僅為開發人員提供了所需的靈活性,還使他們可以充分利用 ide 提供的可以提高生產率的功能。大大簡化的模塊化代碼模型將使該功能更有用、更簡捷,而新增的對內嵌代碼的完全支持顯然會受到那些希望所有代碼都位于一個 .aspx 文件中的開發人員的歡迎。相信 /code 目錄會大大提高生產率,對于那些從事發展迅速的中小型項目的開發人員,以及那些因為編譯過程過于復雜而無法完成工作的開發人員來說尤其如此。它還為訪問業務邏輯組件、資源文件、wsdl 文件以及其他資源提供了一種更為直接、簡單的方法:通過自動編譯、嵌入或創建這些資源的代理并自動引用它們,只需很少的代碼即可訪問這些資源。
預編譯功能使開發人員可以輕松地提高其站點的初始性能,如果需要,還可以通過提供功能完備的 web 應用程序(不包含源代碼或 html)為重要的知識產權信息添加保護措施。最后,集所有功能于一身的 visual studio .net whidbey 無疑會為開發人員帶來非凡的體驗,他們不僅能從內嵌代碼模型和模塊化代碼模型中獲得完全的 intellisense 支持,還能查看給定頁面的所有視圖,開發工作不會再因工具限制而局限于某一種樣式。