HOW TO:在 Web 部署套件中使用 Web 部署參數

本主題說明如何在建立和安裝Web 部署套件時使用 Web Deploy 參數。 當您必須建立套件但不知道一些在安裝套件時需要的值時,Web Deploy 參數很有用。 例如,建立套件的人員可能不知道安裝此套件所需的密碼。 您可能必須安裝相同的套件許多次,而且每次都必須指定不同的設定,此時 Web Deploy 參數也很有用。 例如,您可能打算要在測試環境和實際執行環境中安裝相同的套件,但是必須針對每種環境指定不同的 WCF 端點。

本主題假定您知道如何建立和安裝部署套件。 如需詳細資訊,請參閱 HOW TO:在 Visual Studio 中建立 Web 部署套件

使用資料庫指令碼參數進行部署

您可以在 SQL Server 指令碼中加入參數。 下列範例將示範如何將名為 logText 的變數加入到 SQL Server 指令碼以及如何指派預設值 "DefaultText" 給它。

:setvar logText DefaultText

INSERT [dbo].[Log] ([LogText]) VALUES (N'$(logText)')
GO

在 Visual Studio 中,您可以指定在部署期間應該執行的 SQL Server 指令碼,方法是選取 [更新資料庫],然後按一下 [設定資料庫更新]。 如果指令碼包含參數,Visual Studio 會自動為部署套件建立 Web Deploy 參數。 當您安裝套件時,不論是使用 IIS 管理員或命令列處理序來安裝,都可以針對這些參數提供值。

若要使用資料庫指令碼參數進行部署

  1. 建立具有一個或多個參數的自訂 SQL 指令碼。

  2. 在設定發行設定檔時,將指令碼加入到 [設定資料庫更新] 對話方塊。

  3. 建立部署套件。

  4. 如果您使用 deploy.cmd 檔案來安裝套件,而且想要提供與預設值不同的值,請在安裝套件之前,變更 SetParameters.xml 檔案中的預設值。

    例如,如果您加入了上述範例所示的指令碼,SetParameters.xml 檔案看起來可能很像下列範例:

    <parameters>
      <setParameter name="IIS Web Application Name" 
        value="Default Web Site/WebApplication1_deploy" />
      <setParameter name="ApplicationServices-Deployment Connection String"
        value="" />
      <setParameter name="Sql script variable $(logText) in ApplicationServices-Deployment scripts"
        value="DefaultText" />
      <setParameter name="ApplicationServices-Deployment Connection String"
        value="data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnetdb.mdf;User Instance=true" />
    </parameters>
    

    您可以變更粗體顯示之 XML 項目的 value 屬性,以便設定執行指令碼時所使用的 logText 參數值。

  5. 如果您使用 IIS 管理員來安裝套件,系統就會提示您在 [輸入應用程式封裝資訊] 對話方塊中輸入參數值,如下圖所示:

    IIS 管理員 [輸入封裝資訊] 對話方塊

針對 Web.Config 檔案設定使用部署參數

當您事先知道應該使用的值時,就可以使用 Web.config 檔案轉換來變更已部署之 Web.config 檔案中的設定 (如需詳細資訊,請參閱 ASP.NET 網站上的 Web.config 檔案轉換)。不過,如果您想要在安裝套件而非建立套件時指定特定設定的值,部署參數是較佳選擇。 例如,您可能會想要在安裝套件時進行下列設定:

  • WCF 服務端點。

  • Web 服務端點。

  • 安全性相關資訊,例如加密金鑰。

若要使用部署參數,您必須在專案目錄的 XML 檔案中宣告它們。 當您宣告它們時,可以提供預設值。 然後,您可以變更安裝套件時實際部署的值。

若要針對 Web.Config 檔案設定使用部署參數

  1. 建立空白文字檔案、將它命名為 parameters.xml,然後將它儲存在專案資料夾 (包含專案 .csproj 或 .vbproj 檔案的相同資料夾) 中。

  2. 將名為 parameters 的根項目加入至此檔案,如下列範例所示:

    <parameters>
    </parameters>
    
  3. 針對您想要加入的每個參數,執行下列步驟:

    1. 在 parameters 根項目中,建立含有 name、description、defaultValue 和 tags 屬性的 parameter 項目,如下列範例所示:

      <parameters>
        <parameter name="WebService1 Endpoint Address" 
          description="Please provide the endpoint address for the Web service that you want to call."
          defaultValue=https://contoso.com/WebService1.asmx
          tags="">
        </parameter>
      </parameters>
      

      當您使用 IIS 管理員來安裝套件時,name 屬性值和 description 屬性值會顯示在 UI 中,並且顯示您可以輸入參數值的文字方塊。 defaultValue 屬性值會預先載入文字方塊中。

      如果您省略了 defaultValue 屬性、將它設定為空字串或將它設定為只包含空格的字串,此參數就會被視為必要值。 當您使用 Visual Studio deploy.cmd 檔案來安裝套件時,就必須在 SetParameters.xml 檔案中輸入值。

      tags 屬性可讓您指定參數所代表的資料種類,以便 UI 協助您進行資料輸入 (如果可能的話)。 例如,如果您指定了 Boolean,UI 就會顯示含有 [True] 和 [False] 選項的下拉式清單。 如果您指定了 DBConnectionString,UI 就會在文字方塊旁顯示一個按鈕,而且您可以按一下此按鈕來顯示連接字串對話方塊。 如需您可以使用的標記清單,請參閱 Microsoft TechNet 網站上的 DeploymentWellKnownTag 列舉

    2. 在 parameter 項目中,建立含有 kind、scope 和 match 屬性的 parameterEntry 項目,如下列範例所示:

      <parameters>
        <parameter name="WebService1 Endpoint Address"
          description="Please provide the endpoint address for the Web service that you want to call."
          defaultValue="https://contoso.com/WebService1.asmx"
          tags="">
        <parameterEntry 
          kind="XmlFile"
          scope="obj\\Debug\\Package\\PackageTmp\\Web\.config$"
          match="//setting[@name='WebService1EndPoint']/value/text()" />
        </parameter>
      </parameters>
      

      kind 屬性會指定參數值所套用的資源種類。 Web.config 檔案是 XML 檔案,所以此屬性會設定為 "XmlFile"。

      scope 屬性是規則運算式,它會識別您想要變更之特定檔案的路徑。 在這個範例中,其目的是要單獨變更應用程式 Web.config 檔案 (而非子資料夾中的 Web.config 檔案)。 此運算式所比對的路徑就是建立套件時儲存在 .zip 檔案中的路徑。 此範例中的規則運算式會反映 [偵錯] 組建組態的預設套件建立位置。

      match 屬性是 XPath 運算式,它會選取您想要變更的 XML 節點。 此運算式必須選取文字節點或屬性節點,而非項目。

    3. 如果您想要在多個位置更新相同的參數值,請針對您想要更新參數值的每個位置建立額外的 parameterEntry 項目。

  4. 建置套件。

如果您使用 deploy.cmd 檔案來安裝套件,可以透過編輯 SetParameters.xml 檔案,提供與預設值不同的值 (當您在 parameters.xml 檔案中手動建立參數時,Visual Studio 就會在建置套件時自動將這些參數加入至 SetParameters.xml 檔案。 如需範例,請參閱上述適用於資料庫指令碼參數的程序)。

如果您使用 IIS 管理員來安裝套件,系統就會提示您在 [輸入應用程式封裝資訊] 對話方塊中輸入參數值。 此對話方塊會顯示您所指定的名稱、描述和預設值,如下圖所示:

IIS 管理員 [封裝資訊] 對話方塊

針對其他案例使用參數

上述程序針對參數有用的常見案例提供了詳細的指示。 不過,參數也可以用於其他案例,例如當您必須更新 Web.config 檔案以外之文字檔案或 XML 檔案的內容時。 下列程序將說明如何針對其他案例使用參數。

若要使用其他種類的參數

  1. 將 parameter 項目加入至 parameters.xml 檔案 (如 Web.config 檔案設定的上述程序所述),藉以建立參數。

  2. 加入一個或多個 parameterEntry 項目,以便指出要使用參數值的位置。

    如需您可以指派給 parameterEntry 項目之其他屬性和屬性值的詳細資訊,請參閱 Microsoft TechNet 網站上的使用 declareParam 和 setParam

請參閱

概念

Visual Studio 及 ASP.NET 的 Web 部署內容對應

其他資源

參數化與 Web.config 轉換的比較 (Vishal Joshi 的部落格)

執行中的 Web Deploy 參數化 (Vishal Joshi 的部落格)