Web 應用程式專案和網站專案的比較
在 Visual Studio 中,您可以建立「Web 應用程式專案」(Web Application Project) 或「網站專案」(Web Site Project)。 每種類型的專案各有利弊,建議您了解個中的差異,以便針對需求選取最適合的專案類型。 由於在專案類型之間進行轉換並不實際,因此建立專案之前,您必須先選取適當的專案類型。
![]() |
---|
在某些情況下您無須進行選擇。例如建立 ASP.NET MVC 應用程式,您必須使用 Web 應用程式專案。 |
此主題包括下列章節:
案例
差異摘要
專案檔結構
編譯
部署
案例
適合採用 Web 應用程式專案的情況包括:
您想要在不停止偵錯工作階段的情況下編輯程式碼。
您想要針對程式碼執行單元測試,而且程式碼位於與 ASP.NET 網頁相關聯的類別檔案中。
您想要參考與獨立類別中之頁面和使用者控制項相關聯的類別。
您要建立多個 Web 專案之間的專案相依性。
您想用編譯器將整個網站建立成單一組件。
您要控制所產生之網站的組件名稱和版本號碼。
您想要使用 MSBuild 或 Team Build 來編譯專案。 例如,您可能想要加入建置前後的步驟。
您想要避免將原始程式碼放在實際執行伺服器上。
您想要使用 Visual Studio 2010 所提供的自動化部署工具。
適合採用網站專案的情況包括:
您想要同時在單一 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 中個別管理專案的結構。 例如,您可以使用 Windows 的 [檔案總管] 將檔案複製到專案中,或從專案中刪除這些檔案。
編譯
對於 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 應用程式專案使用,以自動化許多這類工作。 但這些工具並不適用於網站專案。
採行網站專案部署策略的優點包括:
- 如果只對 Web 應用程式進行了些微的變更,將無須重新部署整個應用程式。 取而代之地,您可以只將變更的一個或多個檔案複製到實際執行的 IIS 伺服器。 您也可以直接在實際執行的伺服器上編輯檔案。 (由於 Web 應用程式專案的程式碼檔會編譯成單一的組件檔,除非只變更 .aspx 或 .ascx 檔案,否則即使是些微的變更,您仍須部署整個網站)。
請參閱
概念
逐步解說:在 Visual Studio 中將網站專案轉換成 Web 應用程式專案