在Visual Studio能夠建立 Web 應用程序項目 或 網站項目。 經過選擇 新建項目 或 打開項目 建立或打開一個 Web 應用程序項目在Visual Studio 文件 菜單。 經過選擇 新建網站 或 打開網站 建立或打開一個網站項目在"文件"菜單。 html
每種項目類型各有優缺點,要選擇能夠知足須要的最佳項目類型,應瞭解各項目類型之間的差別。 建立項目以前,必須選擇合適的項目類型,緣由是從一種項目類型轉換到另外一種項目類型並不可行。 ios
![]() |
---|
在某些狀況下,沒法進行選擇。 例如,所以,若是要建立ASP.NET MVC應用程序,您必須使用 Web 應用程序項目。 web |
本主題包含如下各節: 數據庫
Web 應用程序項目的狀況是優先選擇包括: post
-
但願可以使用Visual Studio調試器的 編輯並繼續 功能。
-
須要對與 ASP.NET 頁關聯的類文件中的代碼運行單元測試。
-
須要從獨立類中引用與頁和用戶控件關聯的類。
-
要在多個web項目之間的項目依賴項。
-
您但願編譯器爲整個站點建立單個程序集。
-
您要控制爲站點生成的程序集的名稱和版本號。
-
須要使用 MSBuild 或 Team Build 編譯項目。 例如,您可能但願添加prebuild和postbuild步驟。
-
須要避免將源代碼放置在生產服務器上。
-
須要使用 Visual Studio 中提供的自動化部署工具。
優先選擇網站項目的狀況包括:
-
能夠在單個web項目中包含C#和Visual Basic代碼。 (默認狀況下, Web 應用程序編譯根據項目文件的語言設置。 能夠設置例外狀況,但相對較難。)
-
須要在 Visual Studio 中打開生產站點和使用 FTP 對其進行實時更新。
-
不但願必須顯式編譯項目才能部署項目。
-
若是預編譯站點,您但願編譯器爲站點建立多個程序集,能夠是每一個頁面或用戶控件一個程序集,也能夠是每一個文件夾一個或多個程序集。
-
您但願可以經過僅將新版本複製到生產服務器,或經過在生產服務器上直接編輯文件來更新生產中的各個文件。
-
若是預編譯站點,您但願可以更新各 ASP.NET 網頁(.aspx文件),而無需從新編譯整個網站。
-
您但願在生產服務器上保留源代碼,以便用做附加備份副本。
下表總結了主要差別。
區域 |
Web 應用程序項目 |
網站項目 |
---|---|---|
項目文件結構 |
Visual Studio 項目文件(.csproj 或 .vbproj)存儲有關項目的信息,如項目中包含的文件列表和項目間的任何引用。 |
不存在項目文件(.csproj 或 .vbproj)。 文件夾結構中的全部文件自動包含在站點中。 |
編譯 |
|
|
命名空間 |
默認狀況下,將顯式命名空間添加到頁面、控件和類中。 |
默認狀況下,不將顯式命名空間添加到頁面、控件和類中,但您能夠手動添加它們。 |
部署 |
|
|
Web 應用程序項目使用 Visual Studio 項目文件(.csproj 或 .vbproj)來跟蹤有關項目的信息。 這使得能夠指定哪些文件中或在生成過程當中,將該文件編譯的項目中排除,和。
對於網站項目,文件夾結構中的全部文件自動視爲該網站中。 若是要從生成中排除某些文件,必須從網站項目文件夾中移除文件或將其文件擴展名更改成不禁IIS編譯和提供的擴展名。
使用項目文件的優勢在 Web 應用程序項目以下:
-
易於暫時從站點移除文件,但仍確保不會失去對它們的跟蹤,由於這些文件保留在文件夾結構中。 例如,若是頁面沒有爲部署準備就緒,您能夠暫時從生成中排除它,而無需從文件夾結構中將其刪除。 您能夠部署編譯的程序集,而後再次將文件包括在項目中。 這在使用源代碼管理儲存庫時尤其重要。
在網站項目中使用無項目文件的文件夾結構具備如下優勢:
-
您沒必要專門在 Visual Studio 中管理項目的結構。 例如,經過使用文件資源管理器中,能夠將文件複製到項目中或從項目中刪除它們。
對於 Web 應用程序項目,一般生成項目在Visual Studio中或經過使用不是生產IIS服務器的計算機上的ASP.NET批編譯器。 全部代碼都選件類文件和獨立選件類隱藏文件在項目編譯爲單個程序集,在 Web 應用程序項目的Bin文件夾中放置。 (.aspx和.ascx文件進行動態編譯以與網站項目相似的方式執行。)
對於網站項目,您沒必要手動編譯項目。 網站項目由ASP.NET動態一般內置(在開發計算機和生產IIS服務器上)。 您能夠在批處理編譯模式(一般爲每一個文件夾生成一個程序集)和固定編譯模式(一般爲每一個頁面或用戶控件生成一個程序集)之間選擇。
編譯模型的優勢 Web 應用程序項目中包括:
-
您可使用 MSBuild 來建立自定義批處理編譯過程。
-
指定程序集特性(如名稱和版本)很是簡單。
-
事先編譯可確保在生產服務器上編譯站點期間用戶無須等待。 (若是站點很是大,網站項目的動態編譯可能須要花費大量時間。 動態編譯在更新站點以後收到站點資源請求時發生,而且當編譯所需資源時,觸發編譯的請求可能會被延遲。 若是延遲不可接受,則能夠預編譯站點。 但所以會失去動態編譯的某些優勢。)
-
您能夠徹底控制項目文件夾結構中放置代碼文件的位置,以及項目中的類互相引用的方式。 (動態編譯要求在整個站點中使用的全部類的源代碼必須位於 App_Code 文件夾中。 您不能從 App_Code 中的類引用頁面或用戶控件類。)
網站項目的編譯模型具備如下優勢:
-
您能夠測試特定的頁面,而無論其餘頁面的狀態。 這是由於運行單個頁面不須要成功編譯整個站點,僅需編譯該頁面和該頁面所依賴的任何組件,如 App_Code 文件夾或 Global.asax 文件中的代碼。 (在 Web 應用程序項目,所以,若是任何位置存在編譯錯誤該站點,則不能建立程序集不能測試所編譯站點即便的部分。
-
在生產中更新網站很是容易。 能夠更新生產服務器上的各個源代碼文件,而無需以顯式方式從新編譯站點。 即便因爲編譯錯誤其餘文件未準備就緒,也能夠更新各個爲部署準備就緒的文件。 還能夠直接在 Visual Studio 中打開生產 IIS 服務器上的網站,並實時更新該網站。
-
在某些狀況下,預編譯爲多個程序集具備性能優點。 一個典型示例是具備許多頁面,併爲這些頁面編寫了大量代碼的站點。 其中大多數頁面極少被請求,只有某些頁面常常受到使用。 若是將這樣的站點編譯成多個程序集,生產服務器就能夠僅加載當前請求所需的程序集。 若是未請求某個頁面,則不會加載其對應的程序集。
![]() |
---|
在性能上沒有差別網站項目與 Web 應用程序項目之間。 惟一明顯的例外就是那些已經指出的例外,在實際使用時,它們僅適用於很是大的站點。 第一個請求綁定到該網站可能須要對站點進行編譯,這可能會致使延遲。 此外,若是該網站在較短的內存中的IIS服務器運行,包括單個程序集的整個站點要比對多個程序集可能使用更多的內存是必需的。 |
若要部署 Web 應用程序項目,您複製已經過編譯到IIS服務器的項目建立的程序集。 相反,部署網站項目,一般將項目源文件複製到IIS服務器。
部署策略的優勢 Web 應用程序項目中包括:
-
能夠避免將源代碼部署到 IIS 服務器。 在某些狀況下,例如在共享承載環境中,您可能會關注對 IIS 服務器上源代碼進行的未經受權的訪問。 (對於網站項目,則能夠預編譯在開發計算機和部署所生成的程序集避免此風險而不是源代碼。 不過,在這種狀況下,會失去輕鬆更新站點的某些好處。)
-
除將程序集或代碼複製到服務器以外,部署一般還涉及其餘任務。 例如,數據庫腳本可能必須在生產中運行,Web.config 文件中的鏈接字符串可能須要針對生產服務器進行更改。 Visual Studio提供了一些如一鍵式發佈將 Web 應用程序項目自動化其中的許多任務。 這些工具對於網站項目不可用。
網站項目部署策略的優勢的包括:
-
若是作少許更改到網站,您沒必要從新部署整個站點。 而是能夠只將更改過的文件複製到生產 IIS 服務器。 另外,還可在生產服務器上直接編輯文件。 (由於 Web 應用程序項目的代碼文件編譯成單個程序集文件,則必須部署整個站點即便進行少許更改,所以,除非更改是針對.aspx或.ascx文件。)