VS2005將支持的兩種WEB編程模型的比較2006年4月17日 14:02
上篇Blog我介紹了Visual Studio 2005 Web Application Projects 項(xiàng)目,下面來比較一下它跟 Visual Studio 2005 Web Site Projects 使用的場景和區(qū)別。
內(nèi)容翻譯自:
http://msdn.microsoft.com/vstudio/default.aspx?pull=/library/en-us/dnvs05/html/WAP.asp如果你英文夠好,可以直接看哪里。
你該選擇哪種WEB編程模型
Option or Task Web Application Projects Web Site Projects
你有一個大型的Visual Studio .NET 2003 Web應(yīng)用需要遷移到VS2005。 X
喜歡使用 single-page code 模型來開發(fā)網(wǎng)站頁面。而不是使用code-behind 模型來編寫網(wǎng)站頁面
X
喜歡采用下面的方式編寫網(wǎng)站:
在編寫頁面時候,為了可以快速的看到編寫效果,動態(tài)編譯該頁面,馬上可以看到效果,不用編譯整個站點(diǎn)。
(就是說,只需要保存文件,然后在瀏覽器中刷新一下,就可以看到自己剛剛做的效果) X
需要控制編譯后應(yīng)用程序集的名字 X
需要每個頁面產(chǎn)生一個應(yīng)用程序集 X
WEB頁面或者WEB用戶控件中需要使用到單獨(dú)的類。 X
需要使用多個Project來構(gòu)建一個Web應(yīng)用。 X
需要處理pre-build 和 post-build 事件(編譯前后需要有自己額外的處理) X
希望把一個目錄當(dāng)作一個WEB應(yīng)用來處理,而不需要新建一個Project 文件。 X
這兩種WEB編程模型的不同點(diǎn):
Scenario Web Application Project Web Site Project
Project definition 跟 Visual Studio .NET 2003 類似,由于項(xiàng)目文件的存在,
只有被項(xiàng)目文件所引用的文件才會在Solution Explorer中出現(xiàn)。而且只有這些文件才會被編譯。
可以很容易的把一個ASP.NET應(yīng)用拆分成多個Visual Studio項(xiàng)目。
可以很容易的從項(xiàng)目中和源代碼管理中排除一個文件。 一個目錄結(jié)構(gòu)就是一個WEB項(xiàng)目。沒有項(xiàng)目文件存在。這個目錄下的所有文件,都被作為項(xiàng)目的一部分而存在。
我們實(shí)際部署的一個網(wǎng)站,部署上當(dāng)然不會有任何項(xiàng)目文件存在,如果你想對這個網(wǎng)站進(jìn)行修改,用這種編程模型就非常適合。我們根本不用在乎這個WEB站點(diǎn)中,那些文件屬于哪個項(xiàng)目。
編譯和生成 跟Visual Studio .NET 2003的Web應(yīng)用項(xiàng)目編譯模式幾乎一樣。
項(xiàng)目中的所有的code-behind 類文件和獨(dú)立類文件都被編譯成一個獨(dú)立應(yīng)用程序集。這個應(yīng)用程序集被放在Bin目錄下。因?yàn)槭且粋€獨(dú)立的應(yīng)用程序集,你能夠指定應(yīng)用程序集的名字、版本、輸出位置等信息。
例如:Model-View-Controller (MVC) 模式就可以在這里很好的被使用。因?yàn)樗试S在WEB頁面和WEB用戶控件中引用一個獨(dú)立的類。
編譯(Build)命令僅僅是測試這個WEB站點(diǎn)是否編譯正確,調(diào)試一個WEB站點(diǎn)項(xiàng)目的時候,是通過依賴你的源代碼文件,ASP.net進(jìn)行動態(tài)編譯頁面和類來實(shí)現(xiàn)的。
預(yù)編譯站點(diǎn)和動態(tài)編譯站點(diǎn)用的是同一個 compilation semantics ,你可以通過預(yù)編譯來提高站點(diǎn)的性能。
ASP.net 動態(tài)編譯系統(tǒng)提供了兩種模型:默認(rèn)的batch 編譯模型和fixed-names 編譯模型。
batch 編譯模型中,被編譯成多個應(yīng)用程序集(典型的是每一個目錄被編譯成一個)。這時候你看應(yīng)用程序集,很難對應(yīng)上是哪個目錄。
fixed-names 編譯模型中,網(wǎng)站的每個頁面或者每個用戶控件被編譯成一個應(yīng)用程序集。
Iterative development
調(diào)試或者運(yùn)行Web頁面的時候,你必須全部編譯整個WEB項(xiàng)目。
編譯整個WEB項(xiàng)目通常比較快,因?yàn)閂isual Studio使用了增量編譯模式,僅僅只有文件被修改后,這部分才會被增量編譯進(jìn)去。 你可以配置Visual Studio 2005的編譯屬性:編譯整個站點(diǎn)、編譯一個指定頁面、或者什么都不作。在最后一種情況下,當(dāng)你運(yùn)行一個WEB站點(diǎn)的時候,Visual Studio 僅打開一個瀏覽器,并訪問當(dāng)前或者起始頁,當(dāng)這個請求被發(fā)送后,ASP.net 才開始動態(tài)編譯。
這種模式下,頁面被動態(tài)編譯或者被編譯成不同應(yīng)用程序集,所以如果你調(diào)試或者運(yùn)行一個頁面的時候,不需要整個項(xiàng)目被編譯通過。有錯誤的部分跟你使用的部分可以互不干擾。
默認(rèn)情況下,當(dāng)你運(yùn)行或調(diào)試任何WEB頁的時候,Visual Studio完全編譯Web Site項(xiàng)目。
這么做可以看到編譯時的所有錯誤。但是,在開發(fā)進(jìn)程中,完全編譯整個站點(diǎn)會是相當(dāng)慢的。所以推薦你在開發(fā)調(diào)試中,只編譯當(dāng)前頁。
部署 因?yàn)樗械念愇募痪幾g成一個應(yīng)用程序集,當(dāng)你部署的時候,只需要把這個應(yīng)用程序集和 .aspx文件、.ascx文件以及其它靜態(tài)內(nèi)容文件一起部署。
這種模型下,.aspx 文件將不被編譯,當(dāng)瀏覽器訪問這個頁面的時候,才會被動態(tài)編譯。
不過,如果你使用Web Deployment Projects (一個Visual Studio 2005的插件,沒有被默認(rèn)包含到VS2005中),你就可以把 .aspx 文件也編譯進(jìn)入一個應(yīng)用程序集中。
如果你只修改了小小的一行代碼,你也需要把整個項(xiàng)目的所有代碼都編譯,并且發(fā)布包含所有代碼的這個應(yīng)用程序集。
使用Visual Studio 的 Publish Website 命令,你可以把.aspx 文件 和 code-behind 文件編譯成應(yīng)用程序集,所以你看到的編譯后的 .aspx 文件頭發(fā)生了變化。(注意:Build 命令并不會給你可部署的應(yīng)用程序集)
最新版本的 Publish 將支持僅編譯 code-behind 文件,這樣部署的時候,將不改變 .aspx 文件。
默認(rèn)是在Bin目錄下預(yù)編譯成幾個應(yīng)用程序集,典型的是一個目錄對應(yīng)一個應(yīng)用程序集。
fixed-names 部署選項(xiàng)可以讓每一個WEB頁面或者每個WEB用戶控件創(chuàng)建一個應(yīng)用程序集,這樣每個頁面都有一個可部署的應(yīng)用程序集。但是,fixed-names 部署選項(xiàng)會增多應(yīng)用程序集的個數(shù),而且實(shí)際內(nèi)存使用也會增大。
從Visual Studio .NET 2003升級 因?yàn)楦鶹S2003采用了一樣的WEB項(xiàng)目開發(fā)模型,升級是非常非常簡單的。 Web site 項(xiàng)目的編譯選項(xiàng)不同導(dǎo)致了它跟Visual Studio .NET 2003WEB項(xiàng)目的極大不同。
雖然微軟提供了一個轉(zhuǎn)換向?qū)?,但是如果你的?xiàng)目如果是一個復(fù)雜的VS2003項(xiàng)目,使用這個轉(zhuǎn)換向?qū)Ш?,你還需要對照轉(zhuǎn)換手冊,做很多工作。
如果你要從VS2003升級,建議不要用這種WEB站點(diǎn)開發(fā)模版。而是使用Web application 項(xiàng)目。
反饋
# re: VS2005將支持的兩種WEB編程模型的比較
2006-4-17 14:11 by
ghj1976我個人的感覺
大型網(wǎng)站開發(fā)用
Visual Studio 2005 Web Application Projects 更好點(diǎn)
輕靈級網(wǎng)站用 Visual Studio 2005 Web Site Projects 更好點(diǎn)
增加評論