WebApplication編程模型的優(yōu)點(diǎn):
●網(wǎng)站編譯速度快,使用了增量編譯模式,僅僅只有文件被修改后,這部分才會(huì)被增量編譯進(jìn)去。
●生成的程序集
WebSite:生成隨機(jī)的程序集名,需要通過(guò)插件WebDeployment才可以生成單一程序集
WebApplication:可以指定網(wǎng)站項(xiàng)目生成單一程序集,因?yàn)槭仟?dú)立的程序集,所以和其他項(xiàng)目一樣可以指定應(yīng)用程序集的名字、版本、輸出位置等信息
●可以將網(wǎng)站拆分成多個(gè)項(xiàng)目以方便管理
●可以從項(xiàng)目中和源代碼管理中排除一個(gè)文件
●方便的支持VSTS的Team Build方便每日構(gòu)建
●更強(qiáng)大的代碼檢查功能,并且檢查策略受源代碼控制
●可以對(duì)編譯前后進(jìn)行自己規(guī)定的處理
●對(duì)App_GlobalResources 的Resource強(qiáng)類(lèi)支持(網(wǎng)上說(shuō)的,還沒(méi)有了解過(guò))
●直接升級(jí)使用VS2003構(gòu)建的大型系統(tǒng)
WebSite編程模型的優(yōu)點(diǎn):
●動(dòng)態(tài)編譯該頁(yè)面,馬上可以看到效果,不用編譯整個(gè)站點(diǎn)(主要優(yōu)勢(shì))
●同上,可以使錯(cuò)誤的部分和使用的部分不相干擾(可以要求只有編譯通過(guò)才能簽入)
●可以每個(gè)頁(yè)面生成一個(gè)程序集(一般不會(huì)采用這種方式)
●可以把一個(gè)目錄當(dāng)做一個(gè)Web應(yīng)用來(lái)處理,直接復(fù)制文件就可以發(fā)布,不需要項(xiàng)目文件(適合小站點(diǎn))
●可以把頁(yè)面也編譯到程序集中(應(yīng)該用不到,而且WebApplication也可以通過(guò)WebDeployment插件來(lái)實(shí)現(xiàn))
兩種編程模型的互相轉(zhuǎn)換:
VS2005 SP1內(nèi)置了轉(zhuǎn)換程序,可以非常方便的從WebSite轉(zhuǎn)換到WebApplication
只需要復(fù)制文件,右鍵執(zhí)行“轉(zhuǎn)換為Web應(yīng)用程序”即可。
未查到有專(zhuān)門(mén)的反向轉(zhuǎn)換工具,但比較后發(fā)現(xiàn)如果轉(zhuǎn)換也非常簡(jiǎn)單。
刪除所有*.designer.cs
將*.aspx、*.ascx、*.master頁(yè)面文件中的 Codebehind="******.aspx.cs" 批量替換成 CodeFile="******.aspx.cs"
這樣就可以轉(zhuǎn)換回來(lái)了
Scenario
|
Web Application Project
|
Web Site Project
|
Project definition
|
跟 Visual Studio .NET 2003 類(lèi)似,由于項(xiàng)目文件的存在,只有被項(xiàng)目文件所引用的文件才會(huì)在Solution Explorer中出現(xiàn)。而且只有這些文件才會(huì)被編譯。可以很容易的把一個(gè)ASP.NET應(yīng)用拆分成多個(gè)Visual Studio項(xiàng)目。可以很容易的從項(xiàng)目中和源代碼管理中排除一個(gè)文件。
|
一個(gè)目錄結(jié)構(gòu)就是一個(gè)WEB項(xiàng)目。沒(méi)有項(xiàng)目文件存在。這個(gè)目錄下的所有文件,都被作為項(xiàng)目的一部分而存在。 我們實(shí)際部署的一個(gè)網(wǎng)站,部署上當(dāng)然不會(huì)有任何項(xiàng)目文件存在,如果你想對(duì)這個(gè)網(wǎng)站進(jìn)行修改,用這種編程模型就非常適合。我們根本不用在乎這個(gè)WEB站點(diǎn)中,那些文件屬于哪個(gè)項(xiàng)目。
|
編譯和生成
|
跟Visual Studio .NET 2003的Web應(yīng)用項(xiàng)目編譯模式幾乎一樣。
項(xiàng)目中的所有的code-behind 類(lèi)文件和獨(dú)立類(lèi)文件都被編譯成一個(gè)獨(dú)立應(yīng)用程序集。這個(gè)應(yīng)用程序集被放在Bin目錄下。因?yàn)槭且粋€(gè)獨(dú)立的應(yīng)用程序集,你能夠指定應(yīng)用程序集的名字、版本、輸出位置等信息。
例如:Model-View-Controller (MVC) 模式就可以在這里很好的被使用。因?yàn)樗试S在WEB頁(yè)面和WEB用戶控件中引用一個(gè)獨(dú)立的類(lèi)。
|
編譯(Build)命令僅僅是測(cè)試這個(gè)WEB站點(diǎn)是否編譯正確,調(diào)試一個(gè)WEB站點(diǎn)項(xiàng)目的時(shí)候,是通過(guò)依賴(lài)你的源代碼文件,ASP.net進(jìn)行動(dòng)態(tài)編譯頁(yè)面和類(lèi)來(lái)實(shí)現(xiàn)的。
預(yù)編譯站點(diǎn)和動(dòng)態(tài)編譯站點(diǎn)用的是同一個(gè) compilation semantics ,你可以通過(guò)預(yù)編譯來(lái)提高站點(diǎn)的性能。
ASP.net 動(dòng)態(tài)編譯系統(tǒng)提供了兩種模型:默認(rèn)的batch 編譯模型和fixed-names 編譯模型。
batch 編譯模型中,被編譯成多個(gè)應(yīng)用程序集(典型的是每一個(gè)目錄被編譯成一個(gè))。這時(shí)候你看應(yīng)用程序集,很難對(duì)應(yīng)上是哪個(gè)目錄。
fixed-names 編譯模型中,網(wǎng)站的每個(gè)頁(yè)面或者每個(gè)用戶控件被編譯成一個(gè)應(yīng)用程序集。
|
Iterative development
|
調(diào)試或者運(yùn)行Web頁(yè)面的時(shí)候,你必須全部編譯整個(gè)WEB項(xiàng)目。
編譯整個(gè)WEB項(xiàng)目通常比較快,因?yàn)?/span>Visual Studio使用了增量編譯模式,僅僅只有文件被修改后,這部分才會(huì)被增量編譯進(jìn)去。
|
你可以配置Visual Studio 2005的編譯屬性:編譯整個(gè)站點(diǎn)、編譯一個(gè)指定頁(yè)面、或者什么都不作。在最后一種情況下,當(dāng)你運(yùn)行一個(gè)WEB站點(diǎn)的時(shí)候,Visual Studio 僅打開(kāi)一個(gè)瀏覽器,并訪問(wèn)當(dāng)前或者起始頁(yè),當(dāng)這個(gè)請(qǐng)求被發(fā)送后,ASP.net 才開(kāi)始動(dòng)態(tài)編譯。
這種模式下,頁(yè)面被動(dòng)態(tài)編譯或者被編譯成不同應(yīng)用程序集,所以如果你調(diào)試或者運(yùn)行一個(gè)頁(yè)面的時(shí)候,不需要整個(gè)項(xiàng)目被編譯通過(guò)。有錯(cuò)誤的部分跟你使用的部分可以互不干擾。
默認(rèn)情況下,當(dāng)你運(yùn)行或調(diào)試任何WEB頁(yè)的時(shí)候,Visual Studio完全編譯Web Site項(xiàng)目。
這么做可以看到編譯時(shí)的所有錯(cuò)誤。但是,在開(kāi)發(fā)進(jìn)程中,完全編譯整個(gè)站點(diǎn)會(huì)是相當(dāng)慢的。所以推薦你在開(kāi)發(fā)調(diào)試中,只編譯當(dāng)前頁(yè)。
|
部署
|
因?yàn)樗械念?lèi)文件被編譯成一個(gè)應(yīng)用程序集,當(dāng)你部署的時(shí)候,只需要把這個(gè)應(yīng)用程序集和 .aspx文件、.ascx文件以及其它靜態(tài)內(nèi)容文件一起部署。
這種模型下,.aspx 文件將不被編譯,當(dāng)瀏覽器訪問(wèn)這個(gè)頁(yè)面的時(shí)候,才會(huì)被動(dòng)態(tài)編譯。
不過(guò),如果你使用Web Deployment Projects (一個(gè)Visual Studio 2005的插件,沒(méi)有被默認(rèn)包含到VS2005中),你就可以把 .aspx 文件也編譯進(jìn)入一個(gè)應(yīng)用程序集中。
如果你只修改了小小的一行代碼,你也需要把整個(gè)項(xiàng)目的所有代碼都編譯,并且發(fā)布包含所有代碼的這個(gè)應(yīng)用程序集。
|
使用Visual Studio 的 Publish Website 命令,你可以把.aspx 文件和 code-behind 文件編譯成應(yīng)用程序集,所以你看到的編譯后的 .aspx 文件頭發(fā)生了變化。(注意:Build 命令并不會(huì)給你可部署的應(yīng)用程序集)
最新版本的 Publish 將支持僅編譯 code-behind 文件,這樣部署的時(shí)候,將不改變 .aspx 文件。
默認(rèn)是在Bin目錄下預(yù)編譯成幾個(gè)應(yīng)用程序集,典型的是一個(gè)目錄對(duì)應(yīng)一個(gè)應(yīng)用程序集。
fixed-names 部署選項(xiàng)可以讓每一個(gè)WEB頁(yè)面或者每個(gè)WEB用戶控件創(chuàng)建一個(gè)應(yīng)用程序集,這樣每個(gè)頁(yè)面都有一個(gè)可部署的應(yīng)用程序集。但是,fixed-names 部署選項(xiàng)會(huì)增多應(yīng)用程序集的個(gè)數(shù),而且實(shí)際內(nèi)存使用也會(huì)增大。
|
從Visual Studio .NET 2003升級(jí)
|
因?yàn)楦?/span>VS2003采用了一樣的WEB項(xiàng)目開(kāi)發(fā)模型,升級(jí)是非常非常簡(jiǎn)單的。
|
Web site 項(xiàng)目的編譯選項(xiàng)不同導(dǎo)致了它跟Visual Studio .NET 2003WEB項(xiàng)目的極大不同。
雖然微軟提供了一個(gè)轉(zhuǎn)換向?qū)В侨绻愕捻?xiàng)目如果是一個(gè)復(fù)雜的VS2003項(xiàng)目,使用這個(gè)轉(zhuǎn)換向?qū)Ш螅氵€需要對(duì)照轉(zhuǎn)換手冊(cè),做很多工作。
如果你要從VS2003升級(jí),建議不要用這種WEB站點(diǎn)開(kāi)發(fā)模版。而是使用Web application 項(xiàng)目。
|
選擇何種WEB編程模型
Option or Task
|
Web Application Projects
|
Web Site Projects
|
你有一個(gè)大型的Visual Studio .NET 2003 Web應(yīng)用需要遷移到VS2005。
|
√
|
|
喜歡使用 single-page code 模型來(lái)開(kāi)發(fā)網(wǎng)站頁(yè)面。而不是使用code-behind 模型來(lái)編寫(xiě)網(wǎng)站頁(yè)面
|
|
√
|
喜歡采用下面的方式編寫(xiě)網(wǎng)站:
|
|
√
|
在編寫(xiě)頁(yè)面時(shí)候,為了可以快速的看到編寫(xiě)效果,動(dòng)態(tài)編譯該頁(yè)面,馬上可以看到效果,不用編譯整個(gè)站點(diǎn)。
|
(就是說(shuō),只需要保存文件,然后在瀏覽器中刷新一下,就可以看到自己剛剛做的效果)
|
需要控制編譯后應(yīng)用程序集的名字
|
√
|
|
需要每個(gè)頁(yè)面產(chǎn)生一個(gè)應(yīng)用程序集
|
|
√
|
WEB頁(yè)面或者WEB用戶控件中需要使用到單獨(dú)的類(lèi)。
|
√
|
|
需要使用多個(gè)Project來(lái)構(gòu)建一個(gè)Web應(yīng)用。
|
√
|
|
需要處理pre-build 和 post-build 事件(編譯前后需要有自己額外的處理)
|
√
|
|
希望把一個(gè)目錄當(dāng)作一個(gè)WEB應(yīng)用來(lái)處理,而不需要新建一個(gè)Project 文件。
|
|
√
|