天天看點

Visual Studio 2005下的Web Application Projects和Web Site Projects兩種模型比較

 ​

Scenario Web Application Project Web Site Project
編譯和生成

跟Visual Studio .NET 2003的Web應用項目編譯模式幾乎一樣。

項目中的所有的code-behind 類檔案和獨立類檔案都被編譯成一個獨立應用程式集。這個應用程式集被放在Bin目錄下。因為是一個獨立的應用程式集,你能夠指定應用程式集的名字、版本、輸出位置等資訊。

例如:Model-View-Controller (MVC) 模式就可以在這裡很好的被使用。因為它允許在WEB頁面和WEB使用者控件中引用一個獨立的類。

編譯(Build)指令僅僅是測試這個WEB站點是否編譯正确,調試一個WEB站點項目的時候,是通過依賴你的源代碼檔案,ASP.net進行動态編譯頁面和類來實作的。

預編譯站點和動态編譯站點用的是同一個 compilation semantics ,你可以通過預編譯來提高站點的性能。

ASP.net 動态編譯系統提供了兩種模型:預設的batch 編譯模型和fixed-names 編譯模型。

batch 編譯模型中,被編譯成多個應用程式集(典型的是每一個目錄被編譯成一個)。這時候你看應用程式集,很難對應上是哪個目錄。

fixed-names 編譯模型中,網站的每個頁面或者每個使用者控件被編譯成一個應用程式集。

Iterative

development

調試或者運作Web頁面的時候,你必須全部編譯整個WEB項目。

編譯整個WEB項目通常比較快,因為Visual Studio使用了增量編譯模式,僅僅隻有檔案被修改後,這部分才會被增量編譯進去。

你可以配置Visual Studio 2005的編譯屬性:編譯整個站點、編譯一個指定頁面、或者什麼都不作。在最後一種情況下,當你運作一個WEB站點的時候,Visual Studio 僅打開一個浏覽器,并通路目前或者起始頁,當這個請求被發送後,ASP.net 才開始動态編譯。

這種模式下,頁面被動态編譯或者被編譯成不同應用程式集,是以如果你調試或者運作一個頁面的時候,不需要整個項目被編譯通過。有錯誤的部分跟你使用的部分可以互不幹擾。

預設情況下,當你運作或調試任何WEB頁的時候,Visual Studio完全編譯Web Site項目。

這麼做可以看到編譯時的所有錯誤。但是,在開發程序中,完全編譯整個站點會是相當慢的。是以推薦你在開發調試中,隻編譯目前頁。

部署

因為所有的類檔案被編譯成一個應用程式集,當你部署的時候,隻需要把這個應用程式集和 .aspx檔案、.ascx檔案以及其它靜态内容檔案一起部署。

這種模型下,.aspx 檔案将不被編譯,當浏覽器通路這個頁面的時候,才會被動态編譯。

不過,如果你使用Web Deployment Projects (一個Visual Studio 2005的插件,沒有被預設包含到VS2005中),你就可以把 .aspx 檔案也編譯進入一個應用程式集中。 

如果你隻修改了小小的一行代碼,你也需要把整個項目的所有代碼都編譯,并且釋出包含所有代碼的這個應用程式集。

使用Visual Studio 的 Publish Website指令,你可以把.aspx 檔案和 code-behind 檔案編譯成應用程式集,是以你看到的編譯後的 .aspx 檔案頭發生了變化。(注意:Build 指令并不會給你可部署的應用程式集)

最新版本的 Publish 将支援僅編譯 code-behind 檔案,這樣部署的時候,将不改變 .aspx 檔案。

預設是在Bin目錄下預編譯成幾個應用程式集,典型的是一個目錄對應一個應用程式集。

fixed-names 部署選項可以讓每一個WEB頁面或者每個WEB使用者控件建立一個應用程式集,這樣每個頁面都有一個可部署的應用程式集。但是,fixed-names 部署選項會增多應用程式集的個數,而且實際記憶體使用也會增大。

從Visual Studio .NET 2003更新 因為跟VS2003采用了一樣的WEB項目開發模型,更新是非常非常簡單的。

Web site 項目的編譯選項不同導緻了它跟Visual Studio .NET 2003WEB項目的極大不同。

雖然微軟提供了一個轉換向導,但是如果你的項目如果是一個複雜的VS2003項目,使用這個轉換向導後,你還需要對照轉換手冊,做很多工作。

如果你要從VS2003更新,建議不要用這種WEB站點開發模版。而是使用Web application 項目。

選擇何種WEB程式設計模型

Option or Task Web Application Projects Web Site Projects
你有一個大型的Visual Studio .NET 2003 Web應用需要遷移到VS2005。
喜歡使用 single-page code 模型來開發網站頁面。而不是使用code-behind 模型來編寫網站頁面
喜歡采用下面的方式編寫網站:
在編寫頁面時候,為了可以快速的看到編寫效果,動态編譯該頁面,馬上可以看到效果,不用編譯整個站點。
(就是說,隻需要儲存檔案,然後在浏覽器中重新整理一下,就可以看到自己剛剛做的效果)
需要控制編譯後應用程式集的名字
需要每個頁面産生一個應用程式集
WEB頁面或者WEB使用者控件中需要使用到單獨的類。
需要使用多個Project來建構一個Web應用。
需要處理pre-build 和 post-build 事件(編譯前後需要有自己額外的處理)
希望把一個目錄當作一個WEB應用來處理,而不需要建立一個Project 檔案。

繼續閱讀