判斷需要部署哪些檔案 (C#)

作者 :Scott Mitchell

下載 PDF

哪些檔案需要從開發環境部署到生產環境,取決於 ASP.NET 應用程式是使用網站模型還是 Web 應用程式模型來建置。 深入瞭解這兩個專案模型,以及專案模型如何影響部署。

簡介

部署 ASP.NET Web 應用程式需要將 ASP.NET 相關檔案從開發環境複製到生產環境。 ASP.NET 相關檔案包括 ASP.NET 網頁標記和程式碼,以及用戶端和伺服器端支援檔案。 用戶端支援檔案是您網頁所參考的檔案,並直接傳送至瀏覽器 - 例如影像、CSS 檔案和 JavaScript 檔案。 伺服器端支援檔案包含用來在伺服器端處理要求的檔案。 這包括組態檔、Web 服務、類別檔案、具類型的資料集,以及LINQ to SQL檔案等等。

一般而言,所有用戶端支援檔案都應該從開發環境複製到生產環境,但要複製哪些伺服器端支援檔案取決於您是否要明確地將伺服器端程式碼編譯成元件, (.dll 檔案) ,或者您是否已自動產生這些元件。 本教學課程醒目提示將程式碼明確編譯成元件時,需要部署哪些檔案,而不是自動執行此編譯步驟。

明確編譯與自動編譯

ASP.NET 網頁分成宣告式標記和原始程式碼。 宣告式標記部分包含 HTML、Web 控制項和資料系結語法;程式碼部分包含以 Visual Basic 或 C# 程式碼撰寫的事件處理常式。 標記和程式碼部分通常會分成不同的檔案: WebPage.aspx 包含宣告式標記,同時 WebPage.aspx.cs 裝載程式碼。

請考慮名為 Clock.aspx 的 ASP.NET 網頁,其中包含 Text 屬性設定為頁面載入的目前日期和時間的 Label 控制項。 ) 中 Clock.aspx 宣告式標記部分 (會包含標籤 Web 控制項的標記 - <asp:Label runat="server" id="TimeLabel" /> 而) 中的 Clock.aspx.cs 程式碼部分 (則具有 Page_Load 具有下列程式碼的事件處理常式:

protected void Page_Load(object sender, EventArgs e)
{
    TimeLabel.Text =  "The time at the beep is: " + DateTime.Now.ToString();
}

為了讓 ASP.NET 引擎服務此頁面的要求,必須先編譯檔案) WebPage.aspx.cs (頁面的程式碼部分。 此編譯可能會明確或自動發生。

如果編譯明確發生,則會將整個應用程式的原始程式碼編譯成一或多個元件, .dll (位於應用程式 Bin 目錄中的檔案) 。 如果編譯自動發生,則產生的自動產生元件預設會 Temporary ASP.NET 放在 [檔案] 資料夾中,該資料夾位於 %WINDOWS%\Microsoft.NET\Framework\< 版本 >,不過此位置可透過<compilation>中的 Web.config 專案進行設定。 使用明確編譯時,您必須採取一些動作,將 ASP.NET 應用程式的程式碼編譯成元件,而且此步驟會在部署之前發生。 透過自動編譯,編譯器會在第一次存取資源時,于網頁伺服器上發生。

無論您使用何種編譯模型,所有 ASP.NET 網頁 WebPage.aspx 的標記部分 (檔案) 都必須複製到生產環境。 使用明確編譯時,您必須複製 資料夾中的元件 Bin ,但不需要複製 ASP.NET 頁的程式碼部分 WebPage.aspx.cs , (檔案) 。 使用自動編譯時,您必須複製程式碼部分檔案,讓程式碼存在,而且可以在流覽頁面時自動編譯。 每個 ASP.NET 網頁的標記部分都包含 @Page 指示詞,其中包含屬性,指出頁面的相關程式碼是否已明確編譯,還是是否需要自動編譯。 因此,生產環境可以順暢地使用任一編譯模型,而且您不需要套用任何特殊組態設定來指出使用明確或自動編譯。

表 1 摘要說明使用明確編譯與自動編譯時要部署的不同檔案。 請注意,不論使用的編譯模型為何,如果資料夾存在,您應該一律在資料夾中部署元件 Bin 。 資料夾 Bin 包含 Web 應用程式特定的元件,其中包含使用明確編譯模型時的已編譯原始程式碼。 此 Bin 目錄也包含來自其他專案的元件,以及您可能使用的任何開放原始碼或協力廠商元件,而且這些元件必須位於生產伺服器上。 因此,作為一般經驗法則,在部署時將 Bin 資料夾複製到生產環境。 (如果您使用自動編譯模型,但未使用任何外部元件,則不會有 Bin 目錄 - 沒關係!)

編譯模型 部署標記部分檔案? 部署原始程式碼檔案? 在目錄中部署元件 Bin
明確編譯 No Yes
自動編譯 Yes Yes 是,如果存在) 則為 (

表 1: 您部署的檔案取決於所使用的編譯模型。

下車記憶體通道

使用何種編譯方法,部分取決於如何在 Visual Studio 中管理 ASP.NET 應用程式。 因為。2000 年 NET 的開始有四個不同的 Visual Studio 版本 - Visual Studio .NET 2002、Visual Studio .NET 2003、Visual Studio 2005 和 Visual Studio 2008。 Visual Studio .NET 2002 和 2003 使用 Web 應用程式專案模型來管理 ASP.NET 應用程式。 Web 應用程式專案模型的主要功能包括:

  • 在單一專案檔中定義專案可讓專案產生關聯性檔案的檔案。 Visual Studio 不會將專案檔中未定義的任何檔案視為 Web 應用程式的一部分。
  • 使用明確編譯。 建置專案會將專案內的程式碼檔案編譯成放在 Bin 資料夾中的單一元件。

當 Microsoft 發行 Visual Studio 2005 時,他們捨棄了 Web 應用程式專案模型的支援,並將其取代為網站專案模型。 網站專案模型會以下列方式,將本身與 Web 應用程式專案模型區別:

  • 不使用拼字檢查項目檔案的單一專案檔,而是改用檔案系統。 簡單地說,web 應用程式資料夾中的任何檔案 (或子資料夾) 都會被視為專案的一部分。
  • 在 Visual Studio 中建置專案並不會在 Bin 目錄中建立元件。 相反地,建置網站專案會報告任何編譯時期錯誤。
  • 支援自動編譯。 網站專案通常是藉由將標記和原始程式碼複製到生產環境來部署,不過程式碼可以先行編譯 (明確編譯) 。

Microsoft 發行 Visual Studio 2005 Service Pack 1 時,已解除 Web 應用程式專案模型。 不過,Visual Web Developer 繼續只支援網站專案模型。 好消息是,Visual Web Developer 2008 Service Pack 1 已卸載這項限制。 現在,您可以使用 Web 應用程式專案模型或網站專案模型,在 Visual Studio (和 Visual Web Developer) 中建立 ASP.NET 應用程式。 這兩個模型都有其優缺點。 請參閱 Web 應用程式專案簡介:比較網站專案和 Web 應用程式專案 ,以比較兩個模型,並協助決定最適合您情況的專案模型。

探索範例 Web 應用程式

本教學課程的下載包含名為 Book Reviews 的 ASP.NET 應用程式。 網站會模擬某人可能建立的興趣網站,以與線上社群分享他們的書籍評論。 此 ASP.NET Web 應用程式非常簡單,且包含下列資源:

  • Web.config,應用程式的組態檔。

  • 主版頁面 (Site.master) 。

  • 七個不同的 ASP.NET 網頁:

    • ~/Default.aspx- 網站的首頁。

    • ~/About.aspx - [關於網站] 頁面。

    • ~/Fiction/Default.aspx - 列出已檢閱之虛構書籍的頁面。

      • ~/Fiction/Blaze.aspx- 一個檢閱一篇新版的一篇,其中一篇是一篇新版的一篇。
    • ~/Tech/Default.aspx - 列出已檢閱之技術書籍的頁面。

      • ~/Tech/CYOW.aspx- 檢閱 建立您自己的網站
      • ~/Tech/TYASP35.aspx - 24 小時內教導自己 ASP.NET 3.5 的檢閱。
  • [樣式] 資料夾中有三個不同的 CSS 檔案。

  • 四個影像檔 - 由 ASP.NET 標誌和三個檢閱書籍涵蓋的影像所提供,全部都位於 Images 資料夾中。

  • 檔案 Web.sitemap ,定義網站地圖,並用來在根目錄和 Fiction 資料夾 Tech 的頁面中 Default.aspx 顯示功能表。

  • 名為 BasePage.cs 的類別檔案,定義基 Page 類。 這個類別會根據網站地圖中的頁面位置自動設定 Title 屬性,藉此擴充 類別的功能 Page 。 簡單地說,擴充 (System.Web.UI.Page 而非) 的任何 ASP.NET 程式碼後置類別 BasePage ,都會根據其網站地圖中的位置,將其標題設定為值。 例如,檢視 ~/ Tech/CYOW.aspx 頁面時,標題會設定為 「Home : Technology : Create Your Own Website」。

圖 1 顯示透過瀏覽器檢視書籍評論網站的螢幕擷取畫面。 您會在這裡看到頁面 ~/ Tech/TYASP35.aspx ,這會檢閱 24 小時內教導自己 ASP.NET 3.5一本書籍。 跨越頁面頂端和左側資料行功能表的階層連結是以 中 Web.sitemap 定義的網站地圖結構為基礎。 右上角的影像是資料夾中的其中一個書籍封面影像 Images 。 網站的外觀和風格是透過 [樣式] 資料夾中的 CSS 檔案拼出的級聯樣式表單規則來定義,而總版面配置則定義于主版頁面 Site.master

書籍評論網站提供各種標題的評論

圖 1: 書籍評論網站提供各種標題的評論, (按一下即可檢視完整大小的影像)

此應用程式不會使用資料庫;每個檢閱都會實作為應用程式中的個別網頁。 本教學課程 (,接下來幾個教學課程) 逐步解說部署沒有資料庫的 Web 應用程式。 不過,在未來的教學課程中,我們將增強此應用程式,以儲存資料庫中的評論、讀者批註和其他資訊,並探索需要執行哪些步驟才能正確部署資料驅動 Web 應用程式。

注意

這些教學課程著重于使用 Web 主機提供者裝載 ASP.NET 應用程式,而且不會探索 ASP 之類的輔助主題。NET 的網站地圖系統或使用基 Page 類。 如需這些技術的詳細資訊,如需整個教學課程涵蓋之其他主題的詳細資訊,請參閱每個教學課程結尾的一節。

本教學課程的下載有兩份 Web 應用程式,分別實作為不同的 Visual Studio 專案類型:BookReviewsWAP、Web 應用程式專案和 BookReviewsWSP,這是一個網站專案。 這兩個專案都是使用 Visual Web Developer 2008 SP1 建立,並使用 ASP.NET 3.5 SP1。 若要使用這些專案,請從將內容解壓縮到桌面開始。 若要開啟 [Web 應用程式專案] (BookReviewsWAP) ,請流覽至 BookReviewsWAP 資料夾,然後按兩下 [方案] 檔案 BookReviewsWAP.sln 。 若要開啟 [網站專案] (BookReviewsWSP) ,請啟動 Visual Studio,然後從 [檔案] 功能表中,選擇 [開啟網站] 選項,流覽至 BookReviewsWSP 桌面上的資料夾,然後按一下 [確定]。

本教學課程中的其餘兩節將探討部署應用程式時,您需要複製到生產環境的檔案。 接下來的兩個教學課程 - 使用 FTP 部署您的網站 和使用 Visual Studio 部署您的網站 - 示範如何將這些檔案複製到 Web 主機提供者的不同方式。

決定要部署 Web 應用程式專案的檔案

Web 應用程式專案模型會使用明確編譯 - 每次建置應用程式時,專案的原始程式碼都會編譯成單一元件。 此編譯包含 ASP.NET 網頁的程式碼後置檔案 (~/ Default.aspx.cs 、~/ About.aspx.cs 等等) ,以及 BasePage.cs 類別。 產生的元件會命名為BookReviewsWAP.dll,且位於應用程式的 Bin 目錄中。

圖 2 顯示組成書籍評論 Web 應用程式專案的檔案。

方案總管列出組成 Web 應用程式專案的檔案

圖 2:方案總管列出組成 Web 應用程式專案的檔案

若要部署使用 Web 應用程式專案模型開發的 ASP.NET 應用程式,請先建置應用程式,以便明確地將最新的原始程式碼編譯成元件。 接下來,將下列檔案複製到生產環境:

  • 包含每個 ASP.NET 網頁宣告式標記的檔案,例如 ~/ Default.aspx 、~/ About.aspx 等等。 此外,複製任何主版頁面和使用者控制項的宣告式標記。
  • 元件 (.dll 資料夾中的檔案) Bin 。 您不需要複製程式資料庫檔案, () .pdb 或任何您可以在 目錄中找到的 Bin XML 檔案。

您不需要將 ASP.NET 網頁的原始程式碼檔案複製到生產環境,也不需要複製 BasePage.cs 類別檔案。

注意

如圖 2 所示,類別 BasePage 會實作為專案中的類別檔案,放在名為 HelperClasses 的 資料夾中。 編譯專案時,檔案中的 BasePage.cs 程式碼會隨著 ASP.NET 頁的程式碼後置類別編譯成單一元件,ASP.NET 有一 App_Code 個名為 的特殊資料夾, BookReviewsWAP.dll. 其設計目的是要保存網站專案的類別檔案。 資料夾中的程式 App_Code 代碼會自動編譯,因此不應該與 Web 應用程式專案搭配使用。 相反地,您應該將應用程式的類別檔案放在名為 HelperClasses 、 或 Classes 或類似的一般資料夾中。 或者,您可以將類別檔案放在個別的類別庫專案中。

除了複製與 ASP.NET 相關的標記檔案和資料夾中的元件 Bin 之外,您也需要複製用戶端支援檔案 - 影像和 CSS 檔案,以及其他伺服器端支援檔案和 Web.configWeb.sitemap 。 不論您使用明確或自動編譯,這些用戶端和伺服器端支援檔案都必須複製到生產環境。

決定要為網站專案檔部署的檔案

網站專案模型支援自動編譯,這是使用 Web 應用程式專案模型時無法使用的功能。 使用明確的編譯,您必須將專案的原始程式碼編譯成元件,並將該元件複製到生產環境。 另一方面,使用自動編譯,您只需將原始程式碼複製到生產環境,並視需要由執行時間編譯。

Visual Studio 中的 [建置] 功能表選項同時出現在 Web 應用程式專案和網站專案中。 建置 Web 應用程式專案會將專案的原始程式碼編譯成目錄中 Bin 的單一元件;建置網站專案會檢查是否有任何編譯時期錯誤,但不會建立任何元件。 若要部署使用網站專案模型開發的 ASP.NET 應用程式,您只需要將適當的檔案複製到生產環境,但建議您先建置專案,以確保沒有編譯時期錯誤。

圖 3 顯示組成書籍評論網站專案的檔案。

方案總管列出組成網站專案的檔案

圖 3:方案總管列出組成網站專案的檔案

部署網站專案牽涉到將所有 ASP.NET 相關檔案複製到生產環境,其中包含 ASP.NET 網頁、主版頁面和使用者控制項的標記頁面,以及其程式碼檔案。 您也需要複製任何類別檔案,例如 BasePage.cs。 請注意,檔案 BasePage.cs 位於 App_Code 資料夾中,這是類別檔案的網站專案中使用的特殊 ASP.NET 資料夾。 必須在生產環境上建立特殊資料夾,而且開發環境之 資料夾中的 App_Code 類別檔案必須複製到 App_Code 生產環境上的 資料夾。

除了複製 ASP.NET 標記和原始程式碼檔案之外,您也需要複製用戶端支援檔案 - 影像和 CSS 檔案,以及其他伺服器端支援檔案和 Web.configWeb.sitemap

注意

網站專案也可以使用明確的編譯。 未來的教學課程將探討如何明確編譯網站專案。

總結

部署 ASP.NET 應用程式需要將必要的檔案從開發環境複製到生產環境。 需要同步處理的精確檔案集取決於 ASP.NET 應用程式的程式碼是明確還是自動編譯。 採用的編譯策略會受到 Visual Studio 設定為使用 Web 應用程式專案模型或網站專案模型來管理 ASP.NET 應用程式所影響。

Web 應用程式專案模型會使用明確編譯,並將專案的程式碼編譯成 資料夾中的單一元件 Bin 。 部署應用程式時,必須將 ASP.NET 網頁的標記部分和資料夾的內容 Bin 推送至生產環境;應用程式中的原始程式碼 - 程式碼檔案和程式碼後置類別,例如 , 不需要複製到生產環境。

網站專案模型預設會使用自動編譯,雖然可以明確編譯網站專案,如我們未來教學課程所示。 部署使用自動編譯的 ASP.NET 應用程式,需要將標記部分 原始程式碼複製到生產環境。 第一次要求程式碼時,會在生產環境上自動編譯器代碼。

既然我們已檢查開發環境與生產環境之間需要同步處理的檔案,我們已準備好將書籍評論應用程式部署至 Web 主機提供者。

快樂的程式設計!

深入閱讀

如需本教學課程中所討論之主題的詳細資訊,請參閱下列資源: