在VS2008中,一個ASP.NET應用程式的存在形式有兩種,WebSite 跟 WebProject ;首先必須明確的是,這兩種不同的形式,在最終部署到伺服器和編譯後具有相同的結果,僅在設計時它們的組織圖有所不同。
從建立方式上來說:區別在於:一種是FILE->NEW->PROJECT->ASP.NET WEB APPLICATION ;另一種是:FILE->NEW->WEBSITE;
從組織方式上來說:WP型建立時會產生一個專案檔 *.csproj,來記錄一些編譯調試設定。而WS型沒有。對於WP來說,項目可能只需要一個編譯好的dll程式集就可以響應整個項目的所有應用請求。(我猜的!)而對於WS來說,項目根資料夾下的所有部分都視為是WEB應用程式的一部分。
從編譯方式上來說:運行一個WP時,VS會在啟動瀏覽器之前把所有代碼,所有頁面都編譯成一個程式集(Bin目錄下)。但是也不要被編譯全部代碼嚇到,據說VS採用了一種增量編譯模式,也不會很慢。而對於WS來說,不需要先行編譯代碼。每個頁面在第一次請求時才進行編譯。
細節上來說,Web Project 的頁面中的Page指令中,使用了CodeBehind 屬性,而在Web Site頁面中,使用的是 CodeFile 屬性,來指明該頁面的代碼檔案名稱。樣本如下:
WP:<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="MyWebProject._Default" Trace="False" %>
WS:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
另外, Web Project 中的每一個頁面除了ASPX檔案,同名CS檔案,還有一個叫: *.aspx.desinger.cs 檔案,它裡麵包含了頁面上所有控制項的聲明。而Web Site類型的APP中就沒有這樣東西。因為這部分代碼由ASP.NET在編譯時間產生。
在程式集引用這一方面上,WS的所有程式集引用都是記錄在 web.config 檔案裡面的,這樣ASP.NET在編譯時間解析引用時使用。 但是 WP 中的程式集引用是儲存在專案檔 *.csproj中的,VS在編譯代碼時要使用它們。但有兩個例外:System.core.dll System.Web.Extension.dll 對引用是放在web.config中的,因為它們包含指定新的配置設定所需要的類。
WS 型開發的優點:
部署簡單,只要把網站目錄整個複製到WEB伺服器即可。
簡化了檔案管理,任何分頁檔,增刪隨意,不需要編輯專案檔,或者運用VS。
簡化了團隊協作,可以不同人寫不同的頁面,到時直接放過來就可以了。
簡化了調試,WP型項目中,即使只修改了某個頁面,也必須重新編譯整個應用程式。而WS中每個檔案都單獨編譯,並且頁面只在第一次請求它的時候才編譯。
允許混合使用語言。
WP型開發的優點:
檔案管理比較嚴格,不會有什麼亂七八糟的東西出現,部署的時候不需要原始碼檔案,因為已經被先行編譯進DLL中了。當然WS型也可以使用先行編譯工具先行編譯後再部署。
允許自訂部署過程,可以和MSBuild工具一起使用,允許項目的自動化和定製化編譯。此外,可以對產生的程式集進行更有效控制,可以進行合適的命名或者簽名。而WS產生隨機的程式集名,需要通過外掛程式WebDeployment才可以產生單一程式集
WP型項目更容易遷移。
看了這麼多,它們的一個小小的共同點是 都需要使用 web.config 設定檔。
最後,微軟官方推薦使用 WS 方式進行開發。還有,WS,WP之間的互轉,應該還是比較麻煩的,真碰到了再看。