ASP.NET Web 應用程式專案部署概觀
在 Visual Studio 2010 中建立 ASP.NET Web 應用程式專案或 ASP.NET 網站專案之後,一般會將專案部署到網頁伺服器,以便他人能夠存取您的應用程式。 部署通常不只是將應用程式的檔案從某部伺服器複製至其他伺服器。 您或許需執行其他的工作,例如:
變更在目的環境中必須不同的 Web.config 檔案設定,例如偵錯或資料庫連接字串的設定。
傳播 Web 應用程式所使用之資料庫的資料或資料結構。
設定目的電腦上的 IIS 設定,例如應用程式集區、驗證方法、是否允許瀏覽目錄以及錯誤處理。
安裝安全憑證。
設定目的電腦的登錄值。
將應用程式組件安裝在目的電腦的全域組件快取 (GAC) 中。
副檔名為 Microsoft Internet Information Services (IIS) 的 Web 部署 可以自動化大部分部署工作。 Visual Studio 提供了可搭配 Web 部署 使用的工具,讓您更輕鬆地部署 Web 應用程式專案。
注意事項 |
---|
本主題適用於以 Web 應用程式專案範本所建立的 Web 應用程式。您也可以使用網站專案範本來建立 Web 應用程式。如需如何部署網站專案的詳細資訊,請參閱 ASP.NET 網站專案部署概觀。 |
此主題包括下列章節:
Web 部署套件
按一下即發行
企業情節
協力廠商裝載情節
Web.config 檔案轉換
部署 SQL Server 資料庫
擴充 Web 發行管線
如需本概觀內容所討論之主題的詳細資訊,請參閱 ASP.NET 部署內容對應。
Web 部署套件
若要部署 Web 應用程式專案,您可以使用 Visual Studio 建立「Web 部署套件」並將此套件安裝在目的伺服器上。 部署套件是一種壓縮 (.zip) 檔,其中包含在 IIS 中設定應用程式、將應用程式檔案複製到其中以及設定相關資源 (如資料庫) 所需的資訊。
您可以建立部署套件,然後個別安裝它。 也可以使用「單鍵發行」(One-Click Publish),一個步驟就能完成遠端部署。 (根據預設,單鍵發行並不會建立套件,但是如果您要的話,可以指定單鍵發行應該建立套件)。
除了應用程式的原始程式檔和二進位檔案之外,部署套件通常還包含具有下列資訊種類的檔案:
IIS 設定,例如應用程式集區、驗證方法、是否允許瀏覽目錄,以及錯誤處理。
用來將變更傳播至資料庫資料或資料庫結構的資料庫指令碼。
包含了安裝套件時可能需要變更之值的參數,例如偵錯或連接字串的設定。
Visual Studio 套件建立程序是可擴充的。 您可能想要包含在套件內,但需要自訂擴充的一些資訊範例包含下列項目:
安全憑證。
Windows 登錄設定。
必須安裝於目的電腦之 GAC 中的組件 (.dll 檔)。
指定要包含在部署套件中的項目
Visual Studio 會使用您在專案 [屬性] 頁的 [封裝/發行 Web] 索引標籤上所建立的設定,以判斷要將哪些項目放入部署套件中。 下圖顯示 [封裝/發行 Web] 索引標籤。
影響套件建立的資料庫相關設定會在 [封裝/發行 SQL] 索引標籤上輸入,本主題稍後會加以說明。
這兩個索引標籤可讓您更新最常用的設定。 其他較不常用的設定會儲存在 Visual Studio 專案檔 (.csproj 或 .vbproj) 中,且可藉由直接編輯該檔案加以變更。
建立部署套件
您可以使用下列方法建立套件:
使用 Visual Studio 中的工具。
直接從命令列使用 MSBuild 命令。
間接從 PowerShell 或 Team Build 使用 MSBuild 命令。
安裝部署套件
建立部署套件後,請將其安裝至目的電腦。 Web 部署 使用套件中的資訊來設定 IIS、設定資料庫、建立資料夾結構並複製檔案至其中,以及執行部署應用程式所需的任何其他程序。
您可以以下列方法安裝套件:
從命令列使用 Web 部署。
使用 Visual Studio 所建立的 .cmd 檔案,其中包含安裝套件的 Web 部署 命令。 Web 部署 命令可能會冗長又複雜,而提供這個檔案是為了讓您更輕鬆地從命令列安裝套件。
使用 IIS 管理員。
使用 PowerShell 執行 Web 部署 命令。
當您建立套件時,可以在套件中包含參數。 這些是當您建立套件時提供預設值的名稱/值組,但是在安裝套件時可以為這些名稱/值組提供新的值。 如果您使用 IIS 管理員安裝套件,將會使用文字方塊顯示參數名稱,好讓您可以輸入新的值。 如果您從命令列使用 Web 部署 進行安裝,您可以在 XML 檔案中指定參數值。
套件資料夾的位置和內容
根據預設,Visual Studio 會在 MSBuild IntermediateOutputPath 屬性所識別的資料夾中產生部署套件。 IntermediateOutputPath 屬性會參考專案的 obj\Configuration 資料夾,如下圖的 [方案總管] 視窗所示:
Configuration 的預先定義名稱是 Debug (如上圖所示) 和 Release。 您可以定義其他組建組態。
此套件會在名為 Package 的資料夾中建立。 Package 資料夾包含下列檔案:
<專案名稱>.zip。 這是實際的部署套件。
<專案名稱>.deploy.cmd。 這是叫用 Web 部署 的命令列批次檔,可讓您更輕鬆地從命令列安裝套件。
<專案名稱>.SetParameters.xml。 這個檔案包含的參數會在您使用 deploy.cmd 檔安裝套件時,傳遞給 Web 部署。 對每個參數而言,都會指定由 Visual Studio 套件設定所決定的預設值。 例如,如果您要將 Web 應用程式安裝至多部伺服器,但是每一部伺服器都使用不同的設定,就可以變更這些值。
<專案名稱>.SourceManifest.xml。 這個檔案包含 Visual Studio 傳遞給 Web 部署 的設定,Web 部署 會使用這些設定來建立網頁套件。 Web 部署 只有在建立套件時才需要這個檔案, 安裝套件時不會使用它。
如果您選擇不要將套件建立為 .zip 檔,則原本應儲存在 .zip 檔中的檔案會放在名為 Archive 的資料夾中。 在此情況下,deploy.cmd、SetParameter.xml 和 SourceManifest.xml 檔案名稱的第一個節點是 "Archive" 而不是 projectname。
下圖顯示 Visual Studio、Web 部署 與這些檔案之間的相互關係:
按一下即發行
您也可以使用 Visual Studio「單鍵發行」(One-Click Publish) 功能來進行遠端部署。 在這種情況下,您需在發行設定檔中指定 Visual Studio 部署應用程式的方式和位置。 下圖顯示 [發行設定檔] 對話方塊。
如果您使用單鍵發行將應用程式部署至協力廠商裝載服務公司,則裝載服務公司通常會提供您 [發行設定檔] 對話方塊中所需設定。
當您完成發行設定的指定後,可以按一下此對話方塊或 [Web 單鍵發行] 工具列中的 [發行] 按鈕。 Visual Studio 接著就會將應用程式部署至目的電腦。 在 Web 應用程式專案部署完畢後按一下 [發行] 按鈕時,Visual Studio 只會重新部署變更的項目。
您可以建立多個設定檔,以便發行至不同伺服器,或以不同設定發行至同一部伺服器。
企業情節
在企業環境中,通常是從開發電腦部署至一個或多個中繼環境,例如測試伺服器或執行伺服器。 然後您可以從其中一個中繼環境部署到實際執行環境。
從開發環境進行初始部署時,典型的案例包括:
使用 Visual Studio 建立部署套件並手動加以安裝。
使用命令列處理序來建立及安裝部署套件。 這通常是以批次模式使用 MSBuild 從原始檔控制儲存機制完成。
使用單鍵發行。 如果開發電腦擁有目的環境的遠端存取權、目的電腦已針對您選取的發行方法進行設定,而且您在目的電腦上具有適當權限,才能使用這個選項。 根據預設,單鍵發行並不會建立套件。 但是,您可以指定應該建立套件當做封存或備份使用。
若要在初始部署後從一個環境部署至下一個環境,您可以使用為初始部署所建立的同一個套件。 或者,您可以使用 Web 部署,在部署來源的電腦上建立新的套件。
下圖顯示一些典型的企業情節。
協力廠商裝載情節
如果您使用的是協力廠商裝載公司,而且要從開發電腦直接部署至裝載公司,則可使用下列選項:
使用 Visual Studio 單鍵發行。
建立套件並使用 IIS 管理員進行遠端安裝。
在裝載公司這邊,您的應用程式可能位於共用環境,也可能位於專屬伺服器上。 若是位於共用環境的應用程式,通常您設定環境的能力會受到諸多限制, 例如,您通常無法變更共用裝載環境中的 IIS 設定。
下圖顯示一些典型的協力廠商裝載情節。
Web.config 檔案轉換
Web.config 檔包含的設定,通常需根據應用程式的執行環境而改變。 例如,部署 Web.config 檔至目的伺服器時,可能必須進行如下變更:
變更資料庫連接字串以指向實際執行資料庫。
在實際執行環境中停用偵錯。
如果提供套件至社群網站,則需移除連接字串之類的機密資料。
若要手動管理 Web.config 檔的變更,您可以進行下列作業:
每次部署專案時,分別編輯目的伺服器上的 Web.config 檔。
為每個環境維護不同版本的 Web.config 檔 (可放在不同資料夾或使用不同名稱),當您部署時只複製適合目的環境的版本。
當部署應用程式時,建立 XSLT 檔案來轉換 Web.config 及套用轉換。
對於 Web 應用程式專案,ASP.NET 有提供工具,可在部署 Web.config 檔時自動化此項變更 (轉換) 程序。 對於您要進行部署的每個環境,您需建立轉換檔,指定 Web.config 檔中針對該環境的差異項目。
轉換檔名稱會在 "Web" 與 "config" 之間加入目的環境的名稱 (組建組態名稱) 做為額外節點。 例如,偵錯組建組態的轉換檔為 Web.Debug.Config。 Visual Studio 的 [方案總管] 視窗會自動在 Web.config 檔案底下分組這些檔案,如下圖所示:
轉換檔是 XML 檔案,指定 Web.config 檔的變更方式。 轉換檔使用專為部署時轉換 Web.config 檔案而設計的 XML 屬性。 例如,假設 Web.config 檔具有下列連接字串區段:
<connectionStrings>
<add name="ApplicationServices"
connectionString="[TestDatabase]" />
</connectionStrings>
下列轉換檔指定當部署 Web 應用程式時,應該自動轉換名為 ApplicationServices 的連接字串來指向實際執行資料庫。
<?xml version="1.0"?>
<configuration xmlns:xdt="https://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="ApplicationServices"
connectionString="[ProductionDatabase]"
xdt:Transform="Replace" xdt:Locator="Match(name)"/>
</connectionStrings>
</configuration>
在此範例中,Locator 屬性值 Match(name) 指定只應該變更同名 (ApplicationServices) 的 add 項目。 Transform 屬性值 Replace 指定部署程序應該取代整個 add 項目。
部署 SQL Server 資料庫
當您部署使用 SQL Server 資料庫的 Web 應用程式時,可能也需要傳播資料結構或 (和) 資料。 Visual Studio 可以自動建立指令碼 (.sql 檔),在目的資料庫中進行這項處理,而且這些指令碼可併入網頁套件中。 您也可以納入自訂的 SQL Server 指令碼,並指定指令碼的執行順序。 安裝套件時,Web 部署 會在目的伺服器上執行這些指令碼。
請在專案 [屬性] 頁的 [封裝/發行 SQL] 索引標籤中指定 SQL Server 部署選項。 下圖顯示 [封裝/發行 SQL] 索引標籤。
擴充 Web 發行管線
Web 發行管線 (WPP) 是 Visual Studio 在您建立部署套件或使用單鍵發行時所使用的程序。 WPP 中所執行的工作實際上是由 MSBuild 和 Web 部署 所完成。 這就是為什麼在 Visual Studio 中或使用命令列工具部署時,可以使用相同功能的原因。
WPP 的某些層面可藉由修改控制 MSBuild 行為的 XML 檔案加以擴充。 例如,您可以藉由修改 XML 檔案加以處理的工作包括:
從套件中排除特定的 Web 應用程式檔案或資料夾。
在建立套件之前先行編譯 Web 應用程式。
在目的伺服器的 GAC 中安裝應用程式組件。
更新目的伺服器上的登錄機碼。
安裝目的伺服器上的 SSL 憑證。
其他工作需要您同時擴充 MSBuild 和 Web 部署。 例如,假設您的 Web 應用程式使用 MSMQ,而您想要讓 MSMQ 部署自動化。 若要這樣做,您可以為 Web 部署 建立 MSMQ「提供者」,並修改控制 MSBuild 的檔案將此提供者加入至 WPP。
Web 部署 會使用 .NET Framework 提供者模型。 部署所需要管理的每一種資訊都是由提供者處理。 例如,有適用於 IIS 設定的提供者、適用於 SQL Server 資料庫的提供者、適用於網頁內容 (如 .html 檔案和 .aspx 檔案等內容) 的提供者。
當 Web 部署 建立套件時,它會呼叫每個提供者,以蒐集與要部署之 Web 應用程式相關的資訊。 Web 部署 會叫用提供者來序列化資訊,並將其儲存在檔案中。 當 Web 部署 安裝套件時,提供者會讀取它針對套件所建立的檔案,並還原序列化在目的環境中重建原始設定所需的資訊。提供者必須能夠處理安裝期間的參數。 也就是說,提供者必須能夠處理安裝期間,在 [IIS 管理員] UI 或 Parameters.xml 檔中所提供的值。
下圖顯示 Web 應用程式的資訊、Web 部署 提供者、Web 部署 API、部署套件與參數檔案之間的資料流程。 在圖中,Parameters.xml 顯示在套件 .zip 檔的旁邊,以說明其角色。 但是,Parameters.xml 實際上是包含在套件 .zip 檔中。
開發電腦
網頁伺服器
Web 部署 為提供者提供可能與 Web 應用程式產生關聯的大多數資源種類。 不過,如果沒有任何內建提供者適合您的需求,您可以撰寫自訂提供者。 如需可用提供者的清單,請參閱 Microsoft TechNet 網站上的 Web 部署提供者 (英文)。
下圖顯示當您使用 Web 部署 封裝或發行時,WPP 中典型的步驟順序。 其中顯示已加入下列步驟來擴充 WPP:
排除指定的檔案。
先行編譯 Web 應用程式。
部署 GAC 組件、COM 組件和登錄機碼。
部署 SSL 憑證。
如果您選擇使用單鍵發行及 Web 部署 以外的方法來部署,您只能擴充不適用於 Web 部署 的 WPP 部分,如下圖所示:
如需說明如何在特定案例中擴充 Web 發行管線的範例,請參閱 Visual Web Developer 團隊部落格的以下項目:
如何封裝及部署 COM 元件 (英文)
如何封裝 .NET 組件 (英文)