VS2008 Web Application和Web Site的區別

   自學ArcGIS Server開發過程中碰到,書裏一會兒見Web Application ,一會兒建 Web Site,有點糊塗,網上搜了一下,整理如下,供需要的人蔘考。

MSDN 原文(英文)地址:http://msdn.microsoft.com/en-us/library/aa730880(VS.80).aspx

以下是主要內容的中文翻譯: 

Visual Studio 2008 中 Web Application [ 'Asp.net web應用程序' 項目 ] 和 Web Site Projects [ '網站'項目 ]   的區別

Scenario
Web Application Project
Web Site Project
Project definition
Visual Studio .NET 2003類似,由於項目文件的存在,只有被項目文件所引用的文件纔會在Solution Explorer中出現。而且只有這些文件纔會被編譯。可以很容易的把一個ASP.NET應用拆分成多個Visual Studio項目。可以很容易的從項目中和源代碼管理中排除一個文件。
一個目錄結構就是一個WEB項目。沒有項目文件存在。這個目錄下的所有文件,都被作爲項目的一部分而存在。
我們實際部署的一個網站,部署上當然不會有任何項目文件存在,如果你想對這個網站進行修改,用這種編程模型就非常適合。我們根本不用在乎這個
WEB站點中,那些文件屬於哪個項目。
編譯和生成
Visual Studio .NET 2003Web應用項目編譯模式幾乎一樣。
項目中的所有的code-behind類文件和獨立類文件都被編譯成一個獨立應用程序集。這個應用程序集被放在Bin目錄下。因爲是一個獨立的應用程序集,你能夠指定應用程序集的名字、版本、輸出位置等信息。
例如:Model-View-Controller (MVC)模式就可以在這裏很好的被使用。因爲它允許在WEB頁面和WEB用戶控件中引用一個獨立的類51aspx.com。
編譯(Build)命令僅僅是測試這個WEB站點是否編譯正確,調試一個WEB站點項目的時候,是通過依賴你的源代碼文件,ASP.net進行動態編譯頁面和類來實現的。
預編譯站點和動態編譯站點用的是同一個 compilation semantics,你可以通過預編譯來提高站點的性能。
ASP.net 動態編譯系統提供了兩種模型:默認的batch編譯模型和fixed-names 編譯模型。
batch 編譯模型中,被編譯成多個應用程序集(典型的是每一個目錄被編譯成一個)。這時候你看應用程序集,很難對應上是哪個目錄51aspx.com。
fixed-names 編譯模型中,網站的每個頁面或者每個用戶控件被編譯成一個應用程序集。
Iterative
development
調試或者運行Web頁面的時候,你必須全部編譯整個WEB項目。
編譯整個WEB項目通常比較快,因爲Visual Studio使用了增量編譯模式,僅僅只有文件被修改後,這部分纔會被增量編譯進去。51aspx.com
你可以配置Visual Studio 2005的編譯屬性:編譯整個站點、編譯一個指定頁面、或者什麼都不作。在最後一種情況下,當你運行一個WEB站點的時候,Visual Studio 僅打開一個瀏覽器51aspx.com,並訪問當前或者起始頁,當這個請求被髮送後,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項目開發模型,升級是非常非常簡單的。51aspx.com
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文件。
 

 

Notice:Web site project Convet Web Application Project ,reference http://weblogs.asp.net/meligy/archive/2008/08/03/converting-vs-2008-website-to-web-application.aspx

 

下面是Web Application和Web Site的文件結構  :

                                                                          

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章