方法: Web 配置パッケージで Web 配置パラメーターを使用する

このトピックでは、Web 配置パッケージを作成してインストールするときに Web 配置パラメーターを使用する方法について説明します。 Web 配置パラメーターは、パッケージのインストール時に必要な値の一部が不明な状態のままパッケージを作成しなければならない場合に便利です。 たとえば、パッケージの作成者がパッケージのインストールに必要なパスワードを把握していない場合が考えられます。 また、同じパッケージを複数回インストールし、毎回異なる設定を指定することが必要な場合にも、Web 配置パラメーターが便利です。 たとえば、テスト環境と運用環境に同じパッケージをインストールする予定であっても、環境ごとに異なる WCF エンドポイントを指定することが必要な場合があります。

このトピックでは、配置パッケージを作成してインストールする方法を理解していることを前提とします。 詳細については、「方法: 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 配置パラメーターが作成されます。 IIS マネージャーとコマンド ライン プロセスのどちらを使用する場合も、パッケージをインストールするときにこれらのパラメーターに値を指定できます。

配置にデータベース スクリプト パラメーターを使用するには

  1. 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 File Transformations」(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 Web サイトの「DeploymentWellKnownTag Enumeration」(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 属性は、変更する XML ノードを選択する XPath 式です。 この式には、要素ではなくテキスト ノードまたは属性ノードを選択する必要があります。

    3. 複数の場所で同じパラメーター値を更新するには、パラメーター値を更新する場所ごとに追加の parameterEntry 要素を作成します。

  4. パッケージをビルドします。

deploy.cmd ファイルを使用してパッケージをインストールする場合、SetParameters.xml ファイルを編集して既定値とは異なる値を指定できます (parameters.xml ファイルに手動でパラメーターを作成すると、パッケージのビルド時に Visual Studio によってパラメーターが SetParameters.xml ファイルに追加されます。 たとえば、データベース スクリプト パラメーターに適用される前の手順を参照してください)。

IIS マネージャーを使用してパッケージをインストールする場合は、[アプリケーション パッケージ情報の入力] ダイアログ ボックスにパラメーターの値を入力するよう求めるメッセージが表示されます。 ダイアログ ボックスには、次の図に示すように指定した名前、説明、および既定値が表示されます。

IIS マネージャーのパッケージ情報ダイアログ ボックス

他のシナリオでのパラメーターの使用

これまでの手順では、パラメーターが役立つ一般的なシナリオについて詳細な手順を示しました。 パラメーターは、Web.config ファイル以外のテキスト ファイルまたは XML ファイルの内容を更新する場合など、他のシナリオにも使用できます。 次の手順では、他のシナリオにパラメーターを使用する方法について説明します。

他の種類のパラメーターを使用するには

  1. Web.config ファイルの設定について前の手順で説明したように、parameter 要素を parameters.xml ファイルに追加してパラメーターを作成します。

  2. パラメーター値を使用する場所を示す 1 つ以上の parameterEntry 要素を追加します。

    parameterEntry 要素に割り当てることのできる他の属性と属性値の詳細については、Microsoft TechNet Web サイトの「declareParam および setParam の使用方法」を参照してください。

参照

概念

Visual Studio および ASP.NET の Web 配置コンテンツ マップ

その他の技術情報

パラメーター化と Web.config 変換に関する Vishal Joshi のブログ

Vishal Joshi のブログにある Web 配置のパラメーター化の例