VS中新建網站和新建WEB專案的區別
WebApplication程式設計模型的優點
●網站編譯速度快,使用了增量編譯模式,僅僅只有檔案被修改後,這部分才會被增量編譯進去。
●生成的程式集
WebSite:生成隨機的程式集名,需要通過外掛WebDeployment才可以生成單一程式集
WebApplication:可以指定網站專案生成單一程式集,因為是獨立的程式集,所以和其他專案一樣可以指定應用程式集的名字、版本、輸出位置等資訊
●可以將網站拆分成多個專案以方便管理
●可以從專案中和原始碼管理中排除一個檔案
●方便的支援VSTS的Team Build方便每日構建
●更強大的程式碼檢查功能,並且檢查策略受原始碼控制
●可以對編譯前後進行自己規定的處理
●對App_GlobalResources 的Resource強類支援(網上說的,還沒有了解過)
●直接升級使用VS2003構建的大型系統
WebSite程式設計模型的優點
●動態編譯該頁面,馬上可以看到效果,不用編譯整個站點(主要優勢)
●同上,可以使錯誤的部分和使用的部分不相干擾(可以要求只有編譯通過才能簽入)
●可以每個頁面生成一個程式集(一般不會採用這種方式)
●可以把一個目錄當做一個Web應用來處理,直接複製檔案就可以釋出,不需要專案檔案(適合小站點)
●可以把頁面也編譯到程式集中(應該用不到,而且WebApplication也可以通過WebDeployment外掛來實現)
兩種程式設計模型的互相轉換
VS2005 SP1內建了轉換程式,可以非常方便的從WebSite轉換到WebApplication
只需要複製檔案,右鍵執行“轉換為Web應用程式”即可。
未查到有專門的反向轉換工具,但比較後發現如果轉換也非常簡單。
刪除所有*.designer.cs
將*.aspx、*.ascx、*.master頁面檔案中的 Codebehind="******.aspx.cs" 批量替換成 CodeFile="******.aspx.cs"
這樣就可以轉換回來了
Scenario
|
Web Application Project
|
Web Site Project
|
Project definition
|
跟 Visual Studio .NET 2003 類似,由於專案檔案的存在,只有被專案檔案所引用的檔案才會在Solution Explorer中出現。而且只有這些檔案才會被編譯。可以很容易的把一個ASP.NET應用拆分成多個Visual Studio專案。可以很容易的從專案中和原始碼管理中排除一個檔案。
|
一個目錄結構就是一個WEB專案。沒有專案檔案存在。這個目錄下的所有檔案,都被作為專案的一部分而存在。
我們實際部署的一個網站,部署上當然不會有任何專案檔案存在,如果你想對這個網站進行修改,用這種程式設計模型就非常適合。我們根本不用在乎這個WEB站點中,那些檔案屬於哪個專案。 |
編譯和生成
|
跟Visual Studio .NET 2003的Web應用專案編譯模式幾乎一樣。
專案中的所有的code-behind 類檔案和獨立類檔案都被編譯成一個獨立應用程式集。這個應用程式集被放在Bin目錄下。因為是一個獨立的應用程式集,你能夠指定應用程式集的名字、版本、輸出位置等資訊。
例如:Model-View-Controller (MVC) 模式就可以在這裡很好的被使用。因為它允許在WEB頁面和WEB使用者控制元件中引用一個獨立的類。
|
編譯(Build)命令僅僅是測試這個WEB站點是否編譯正確,除錯一個WEB站點專案的時候,是通過依賴你的原始碼檔案,ASP.net進行動態編譯頁面和類來實現的。
預編譯站點和動態編譯站點用的是同一個 compilation semantics ,你可以通過預編譯來提高站點的效能。
ASP.net 動態編譯系統提供了兩種模型:預設的batch 編譯模型和fixed-names 編譯模型。
batch 編譯模型中,被編譯成多個應用程式集(典型的是每一個目錄被編譯成一個)。這時候你看應用程式集,很難對應上是哪個目錄。
fixed-names 編譯模型中,網站的每個頁面或者每個使用者控制元件被編譯成一個應用程式集。
|
Iterative
development |
除錯或者執行Web頁面的時候,你必須全部編譯整個WEB專案。
編譯整個WEB專案通常比較快,因為Visual Studio使用了增量編譯模式,僅僅只有檔案被修改後,這部分才會被增量編譯進去。
|
你可以配置Visual Studio 2005的編譯屬性:編譯整個站點、編譯一個指定頁面、或者什麼都不作。在最後一種情況下,當你執行一個WEB站點的時候,Visual Studio 僅開啟一個瀏覽器,並訪問當前或者起始頁,當這個請求被髮送後,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專案開發模型,升級是非常非常簡單的。
|
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 檔案。
|
|
√
|
相關文章
- VS2005新建網站對話方塊(檔案系統、HTTP、FTP)的區別網站HTTPFTP
- Java web之新建第一個web專案JavaWeb
- Golang初學:新建專案 及 gin web 專案GolangWeb
- 新建git專案Git
- laravel 新建專案Laravel
- 專案新建模板
- Idea新建Maven專案,無法新建package,不能識別module結構體IdeaMavenPackage結構體
- maven新建Spring MVC + MyBatis + Oracle的Web專案中pom.xml檔案MavenSpringMVCMyBatisOracleWebXML
- IDEA新建Maven Java Web專案-詳細教程IdeaMavenJavaWeb
- VS2013新建web專案時出錯,系統找不到指定檔案Web
- 新建 Laravel 6 專案(火星)Laravel
- AntDesignBlazor示例——新建專案Blazor
- 使用pycharm新建Django專案PyCharmDjango
- 新建vite + bootstrap 5 專案Viteboot
- rebuild index 和 recreate index (重新建立index) 的區別RebuildIndex
- SpringBoot(一) 新建專案Spring Boot
- idea中新建javaWeb專案IdeaJavaWeb
- [VUE]vue3新建專案Vue
- mac vscode go專案裡不可新建檔案或資料夾MacVSCodeGo
- Webstorm 新建 Express 專案結構分析WebORMExpress
- 在Eclipse中新建Maven專案EclipseMaven
- VS2017新建MVC+ORM中的LinqDb訪問資料庫專案MVCORM資料庫
- 新建maven專案pom報錯的問題Maven
- vscode新建cmake專案ctrl左鍵無法索引標頭檔案VSCode索引
- 新建分支 header區Header
- vscode 新建、合併分支VSCode
- Eclipse新建/匯入Gradle專案EclipseGradle
- [新手開發記錄] 新建一個網站網站
- 如何使用虛擬主機cPanel新建別名共享一個網站網站
- ionic V3.10 新建空白專案中檔案的簡單介紹
- 新建鉤子檔案
- python 新建專案呼叫已安裝模板Python
- IntelliJ IDEA如何新建專案HTMLIntelliJIdeaHTML
- pycharm新建專案環境設定詳解PyCharm
- idea專案的resource目錄新建資料夾Idea
- win10新建跨區卷如何操作 win10怎麼新建跨區卷Win10
- git新建一個檔案Git
- Layui+MVC+EF (專案從新建立開始)UIMVC