Visual Studio 中 Web 應用程式專案和網站專案的比較
您可以在 Visual Studio 中建立 Web 應用程式專案 或網站專案。 您可以藉由選取 [新增專案] 或 [開啟專案] 建立或開啟 Web 應用程式專案在 Visual Studio [檔案] 功能表。 您可以藉由選取 [新網站] 或 [開啟網站] 建立或開啟網站專案的 [檔案] 功能表。
每種類型的專案各有利弊,建議您了解個中的差異,以便針對需求選取最適合的專案類型。 由於在專案類型之間進行轉換並不實際,因此建立專案之前,您必須先選取適當的專案類型。
注意事項 |
---|
在部分案例中,您無須進行選擇。例如,在中,如果您想要建立 ASP.NET MVC 應用程式,您必須使用 Web 應用程式專案。 |
此主題包括下列章節:
案例
差異摘要
專案檔結構
編譯
部署
案例
Web 應用程式專案的情況為慣用的選項包括下列各項:
您可以使用 Visual Studio 偵錯工具的 編輯後繼續 功能。
您想要針對程式碼執行單元測試,而且程式碼位於與 ASP.NET 網頁相關聯的類別檔案中。
您想要參考與獨立類別中之頁面和使用者控制項相關聯的類別。
您要建立多個 Web 專案的專案相依性。
您想用編譯器將整個網站建立成單一組件。
您要控制所產生之網站的組件名稱和版本號碼。
您想要使用 MSBuild 或 Team Build 來編譯專案。 例如,您可能會想要將建置前和建置後步驟。
您想要避免將原始程式碼放在實際執行伺服器上。
您想要使用 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 中建置專案或使用 ASP.NET 批次編譯器在非實際執行的 IIS 伺服器的電腦。 所有程式碼後置類別檔案和個別類別檔案在專案編譯為單一組件,在 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 檔案)。
請參閱
概念
Visual Studio 及 ASP.NET 的 Web 部署內容對應