天天看點

Web Site 與 Web Application 的差別

[不知道原出處哪裡,但是感謝原作者]

WebSite 與 Web Application 的差別

"網站"是以檔案目錄為基本機關管理的,檔案夾中的所有檔案都是項目的一部分,直接把iis設成開發目錄就可以運作,是非常适合web開發的一種模式。它沒有項目檔案,不需要編譯,友善調試。是vs2005新推出的一種模式。

"應用程式"是以項目為管理基本機關的。是為了元件化開發等準備的,有項目檔案,需要編譯釋出,适合團隊開發使用,但是對web的開發模式并不十分适應。主要是為了相容win的開發方式,是一種遺留模式

一些開發者認為Web Site 項目使用起來更加自然,友善。而另一些開發者則比較喜歡清晰明了的定義項目中的使用到的資源和檔案,而不是象Web Site中,隻要是在網站根目錄下的檔案都是網站的資源(盡管Web Site中也有排除檔案的功能,但是是通過修改檔案的字尾來實作的,和Web Application中記錄到項目檔案中的做法是不一樣的)。

下面是Web Site 和 Web Application 在不同情況下的比較。

Option or Task Web Application Projects Web Site Projects
将大型 Visual Studio .NET 2003 應用程式遷移到 Visual Studio 2005。 X
希望不使用代碼分離技術。 X
希望在開發中可以動态編譯頁面,不需在每個檔案修改,儲存後,手動編譯,而隻是通過重新整理頁面就看到修改的效果。 X
需要控制項目生成的程式集的名字、版本、輸出位置等資訊。 X
需要針對每個頁面生成獨立的程式集。 X
使用獨立的類來引用頁控件類和使用者控件類。 X
使用多個 Web 項目生成 Web 應用程式。 X
在編譯過程中添加預先生成和後期生成步驟。 X
需要直接使用獨立的檔案夾,作為web 項目時,并且不建立項目檔案。 X

下面的表格列出了Web Application 和 Web Site 的重要差別。

情況 Web Application Project Web Site Project
工程定義 隻有在 Web Application的解決方案中引用的檔案才是項目的一部分。這些檔案也顯示在解決方案資料總管中,并在生成期間進行編譯。由于存在項目檔案,是以有些方案更加容易實作。例如,可以将一個 ASP.NET 應用程式細分為多個 Visual Studio 項目。還可以輕松地從項目和源代碼中排除檔案。

Web site 使用文檔結構管理項目檔案。他不包括項目檔案,檔案夾中的所有檔案都是項目的一部分

适用于現存不包含項檔案的網站目錄。

編譯和生成輸出 項目中所有的程式代碼檔案,和獨立的檔案都被編譯成為一個程式集,儲存在bin檔案夾中,可以指定程式集的名字、版本、輸出位置等資訊

在Web Site 項目中使用生成指令時,并不會生成程式集 ,而隻是對Web Site進行驗證 。在運作Web Site的時候,由asp.net的動态編譯部署的頁面,類源檔案。

同時也可以對站點進行預編譯以提高性能,在預編譯中使用的是和動态編譯同樣的技術。

Asp.net預編譯有2中模式. batch mode (the default) and fixed-names mode. batch mode 中生成一個程式集。fixed mode 每個頁面,使用者控件都生成獨立的程式集。

開發 在需要運作和調試程式之前需要進行編譯整個項目,但是通常Web Application編譯速度很快,因為使用了增量編譯模式,僅僅隻有檔案被修改後,這部分才會被增量編譯進去。

由于使用了動态編譯機制,并且編譯到不同的程式集,是以通路或者調試特定頁面時,不需要編譯整個項目編譯成功。

生成指令會對整個項目進行驗證,但是速度較慢,是以建議在開發和調試的過程中,僅使用編譯目前頁面。

部署

由于是以代碼檔案都生成為一個程式集,是以隻需要把程式集和.aspx等頁面檔案部署到伺服器上。

.aspx檔案隻有在被浏覽器通路到的時候才進行編譯。

每次更新程式集的時候,相當于替換了所有的頁面代碼.

使用釋出指令可以把.aspx檔案和背景代碼檔案都編譯到程式集中,如果選擇了updateable publish option 時,隻是對背景代碼進行編譯 。

預設模式會針對每個檔案夾生成一個程式集.固定名稱模式,會針對每個頁面,控件生成一個程式集 ,不過可能造成存儲空間的額外負擔。

從Visual Studio .NET 2003 更新 由于和.net 2003工作原理相同,基本不需要太多的操作。 需要使用更新向導,并且需要其他的一些額外操作。

WebApplication程式設計模型的優點:ZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  ●網站編譯速度快,使用了增量編譯模式,僅僅隻有檔案被修改後,這部分才會被增量編譯進去。ZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  ●生成的程式集ZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  WebSite:生成随機的程式集名,需要通過插件WebDeployment才可以生成單一程式集WebApplication:可以指定網站項目生成單一程式集,因為是獨立的程式集,是以和其他項目一樣可以指定應用程式集的名字、版本、輸出位置等資訊ZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  ●可以将網站拆分成多個項目以友善管理ZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  ●可以從項目中和源代碼管理中排除一個檔案ZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  ●支援VSTS的Team Build友善每日建構ZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  ●更強大的代碼檢查功能,并且檢查政策受源代碼控制ZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  ●可以對編譯前後進行自己規定的處理ZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  ●對App_GlobalResources 的Resource強類支援ZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  ●直接更新使用VS2003建構的大型系統ZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  WebSite程式設計模型的優點:ZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  ●動态編譯該頁面,馬上可以看到效果,不用編譯整個站點(主要優勢)ZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  ●同上,可以使錯誤的部分和使用的部分不相幹擾ZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  ●可以每個頁面生成一個程式集ZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  ●可以把一個目錄當做一個Web應用來處理,直接複制檔案就可以釋出,不需要項目檔案ZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  ●可以把頁面也編譯到程式集中ZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  兩種程式設計模型的互相轉換:ZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  VS2005 SP1内置了轉換程式,可以非常友善的從WebSite轉換到WebApplicationZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  隻需要複制檔案,右鍵執行“轉換為Web應用程式”即可。ZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  未查到有專門的反向轉換工具,但比較後發現如果轉換也非常簡單。ZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  *.designer.csZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  *.aspxZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  *.ascxZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  *.masterZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  删除所有*.designer.csZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  将*.aspx、*.ascx、*.master頁面檔案中的 Codebehind="FileList.aspx.cs" 批量替換成 CodeFile="FileList.aspx.cs"ZC¸Bej?àbbs.51aspx.comæ'âˆoD"]éƒ

  總之,大網站比較适合用WebApplication項目,小網站比較适合用WebSite項目。

繼續閱讀