MSDNをWebアプリケーションプロジェクトの導入に使用するWeb.config変換構文

12597 ワード

Web.义齿


.NET Framework 4
Web.configファイルには、通常、アプリケーションの実行環境に応じて異なる設定が含まれます.例えば、Webを配備する.configファイルの場合、データベース接続文字列を変更するか、デバッグを無効にする必要があります.Webアプリケーションプロジェクトの場合、ASP.NETは、これらのプロジェクトを導入する際のWebの変更(変換)を自動的に完了するためのツールを提供しています.configファイルのプロセス.配置する環境ごとに、元のWebのみを指定する変換ファイルを作成します.configファイルとその環境に適した配置済みWeb.configファイルの違い.
変換ファイルはXMLファイルで、Webを配置することを指定します.configファイルの変更方法変換操作は、XML-Document-transformネーミングスペース(xdt接頭辞にマッピング)で定義されたXMLプロパティを使用して指定します.XML-Document-transformネーミングスペースは、LocatorとTransformの2つの特性を定義します.Locatorプロパティは、何らかの方法で変更するWebを指定します.config要素または要素のセット.Transformプロパティは、Locatorプロパティで検索した要素に対して実行するアクションを指定します.
次の例では、接続文字列を変更してcustomErrors要素を置き換える変換ファイルの内容を示します.
コピー
<?xml version="1.0"?>

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

  <connectionStrings>

    <add name="MyDB" 

      connectionString="value for the deployed Web.config file" 

      xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>

  </connectionStrings>

  <system.web>

    <customErrors defaultRedirect="GenericError.htm"

      mode="RemoteOnly" xdt:Transform="Replace">

      <error statusCode="500" redirect="InternalError.htm"/>

    </customErrors>

  </system.web>

</configuration>


変換ファイルのルート要素は、前の例に示すように、XML-Document-transformネーミングスペースを開始タグに指定する必要があります.LocatorとTransform要素自体が配備されていないWeb.configファイルで再現します.
次のセクションでは、変換ファイルで使用する構文の参照情報を示します.
Locatorプロパティ構文
次の各セクションでは、Locatorプロパティの構文を説明します.
条件
現在の要素のXPath式に追加されるXPath式を指定します.組合せXPath式に一致する要素を選択しました.
構文
コピー
Locator="Condition(XPath expression)"



次の例では、nameプロパティ値がoldnameの接続文字列要素、またはoldproviderのproviderNameプロパティを選択する方法を示します.配備するWeb.configファイルでは、選択した要素が変換ファイルで指定した要素に置き換えられます.
コピー
<configuration xmlns:xdt="...">

  <connectionStrings>

    <add name="AWLT" connectionString="newstring"

       providerName="newprovider"

       xdt:Transform="Replace" 

       xdt:Locator="Condition(@name='oldname'

         or @providerName='oldprovider')" />

  </connectionStrings>

</configuration>


指定するCondition式の結果としてWebの開発に適用する.configファイルの有効なXPath式は次のとおりです.
configuration/connectionStrings[@name='AWLT' or @providerName='System.Data.SqlClient']
この式は、現在の要素(configuration/connectionStrings)の暗黙的XPath条件と明示的に指定された式を組み合わせた結果です.
Match
指定した1つ以上のプロパティに一致する値を持つ1つ以上の要素を選択します.複数のプロパティ名を指定すると、指定したすべてのプロパティに一致する要素のみが選択されます.
構文
コピー
Locator="Match(comma-delimited list of one or more attribute names)"



次の例では、Webを開発する接続文字列add要素を選択する方法を示します.configファイルのnameプロパティにはAWLTがあります.配備するWeb.configファイルでは、選択した要素が変換ファイルで指定したadd要素に置き換えられます.
コピー
<configuration xmlns:xdt="...">

  <connectionStrings>

    <add name="AWLT" connectionString="newstring"

       providerName="newprovider"

       xdt:Transform="Replace" 

       xdt:Locator="Match(name)" />

  </connectionStrings>

</configuration>


XPath
開発に適用するWebを指定します.configファイルの絶対XPath式.(Conditionと異なり、指定した式は現在の要素に対応する暗黙的XPath式に追加されません.)
構文
コピー
Locator="XPath(XPath expression)"



次の例では、前のConditionキーの例で選択した要素と同じ要素を選択する方法を示します.
コピー
<configuration xmlns:xdt="...">

  <connectionStrings>

    <add name="AWLT" connectionString="newstring"

       providerName="newprovider"

       xdt:Transform="Replace" 

       xdt:Locator="XPath(configuration/connectionStrings[@name='AWLT'

         or @providerName='System.Data.SqlClient'])" />

  </connectionStrings>

</configuration>


Transformプロパティ構文
次の各セクションでは、Transformプロパティの構文を説明します.
Replace
選択した1つ以上の要素を変換ファイルで指定した要素に置き換えます.Replaceキーワードの使用例については、Locatorプロパティの例を参照してください.
構文
コピー
Transform="Replace"


Insert
変換ファイルで定義された要素を、選択した1つ以上の要素の兄弟として追加します.この新しい要素は、任意のセットの最後に追加されます.
構文
コピー
Transform="Insert"



次の例では、Webの開発を選択する方法を示します.configファイル内のすべての接続文字列.配備するWeb.configファイルでは、指定した接続文字列がコレクションの最後に追加されます.
コピー
<configuration xmlns:xdt="...">

  <connectionStrings>

    <add name="AWLT" connectionString="newstring"

       providerName="newprovider"

       xdt:Transform="Insert" />

  </connectionStrings>

</configuration>


InsertBefore
変換XMLで定義した要素を、指定したXPath式で選択した要素に直接挿入します.XPath式は、Webの開発に全体として適用するため、絶対式でなければならない.現在の要素の暗黙的XPath式に追加するだけでなく、configファイル.
構文
コピー
Transform="InsertBefore(XPath expression)"



次の例では、すべてのユーザーのアクセスを拒否するdeny要素を選択し、管理者にアクセス権を付与するallow要素を挿入する方法を示します.
コピー
<configuration xmlns:xdt="...">

  <authorization>

    <allow roles="Admins"

      xdt:Transform="InsertBefore(/configuration/system.web/authorization/deny[@users='*'])" />

  </authorization>

</configuration>


InsertAfter
変換XMLで定義した要素を、指定したXPath式で選択した要素に直接挿入します.XPath式は、Webの開発に全体として適用するため、絶対式でなければならない.現在の要素の暗黙的XPath式に追加するのではなく、configファイル.
構文
コピー
Transform="InsertAfter(XPath expression)"



次の例では、管理者にアクセス権を付与するallow要素を選択し、その後、指定したユーザーのアクセスを拒否するdeny要素を挿入する方法を示します.
コピー
<configuration xmlns:xdt="...">

  <authorization>

    <deny users="UserName"

      xdt:Transform="InsertAfter

        (/configuration/system.web/authorization/allow[@roles='Admins'])" />

  </authorization>

</configuration>


削除
選択した要素を除去します.複数の要素が選択されている場合は、最初の要素が除去されます.
構文
コピー
Transform="Remove"



次の例では、Webの開発を選択する方法を示します.configファイル内のすべての接続文字列add要素.配備するWeb.configファイルでは、最初の接続文字列要素のみが削除されます.
コピー
<configuration xmlns:xdt="...">

  <connectionStrings>

    <add xdt:Transform="Remove" />

  </connectionStrings>

</configuration>


RemoveAll
選択した1つまたは複数の要素を除去します.
構文
コピー
Transform="RemoveAll"



次の例では、Webの開発を選択する方法を示します.configファイル内のすべての接続文字列.配備するWeb.configファイルでは、すべての要素が削除されます.
コピー
<configuration xmlns:xdt="...">

  <connectionStrings>

    <add xdt:Transform="RemoveAll" />

  </connectionStrings>

</configuration>


RemoveAttributes
選択した要素から指定したプロパティを除去します.
構文
コピー
Transform="RemoveAttributes(comma-delimited list of one or more attribute names)"



次の例では、Webの開発を選択する方法を示します.configファイル内のすべてのcompilation要素.(プロファイルにはcompilation要素が1つしかないので、Locatorプロパティを指定する必要はありません.)配備するWeb.configファイルでは、debugプロパティとbatchプロパティがcompilation要素から削除されます.
コピー
<configuration xmlns:xdt="...">

  <compilation 

    xdt:Transform="RemoveAttributes(debug,batch)">

  </compilation>

</configuration>


SetAttributes
選択した要素のプロパティを指定した値に設定します.Replace変換プロパティは、すべてのプロパティを含む要素全体を置き換えます.代わりに、SetAttributesプロパティを使用すると、要素をそのまま保持し、選択したプロパティのみを変更できます.
構文
コピー
Transform="SetAttributes(comma-delimited list of one or more attribute names)"



次の例では、Webの開発を選択する方法を示します.configファイル内のすべてのcompilation要素.(プロファイルにはcompilation要素が1つしかないので、Locatorプロパティを指定する必要はありません.)配備するWeb.configファイルでは、compilation要素のbatchプロパティの値をfalseに設定します.
コピー
<configuration xmlns:xdt="...">

  <compilation 

    batch="false"

    xdt:Transform="SetAttributes(batch)">

  </compilation>

</configuration>


Locatorプロパティの省略
Locatorプロパティはオプションです.Locatorプロパティが指定されていない場合、変更する要素はTransformプロパティを指定する要素によって暗黙的に指定されます.以下の例では、システム全体を置き換える.Web要素は、他の側面を示すためにLocatorプロパティが指定されていないためです.
コピー
<?xml version="1.0"?>

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">

  <system.web xdt:Transform="Replace">

    <customErrors defaultRedirect="GenericError.htm"

      mode="RemoteOnly">

      <error statusCode="500" redirect="InternalError.htm"/>

    </customErrors>

  </system.web>

</configuration>


独立要素のTransformとLocatorプロパティの使用
Locator要素と同じ要素にTransformプロパティを設定する必要はありません.親エレメントにLocatorエレメントを指定して、子エレメントを使用するエレメントを選択できます.サブエレメントにTransformプロパティを指定して、変更をサブエレメントに適用できます.
次の例では、Locatorプロパティを使用して指定したパスのlocation要素を選択する方法を示します.ただし、選択したlocation要素のサブ要素のみが変換できます.
コピー
<configuration xmlns:xdt="...">

  <location path="C:\MySite\Admin" xdt:Locator="Match(path)"> 

    <system.web>

      <pages viewStateEncryptionMode="Always"

        xdt:Transform="SetAttributes(viewStateEncryptionMode)" />

    </system.web> 

  </location> 

</configuration>


同じエレメントまたはサブエレメントにLocatorプロパティを指定してもTransformプロパティが指定されていない場合は、変更は行われません.
に注意
親エレメントのTransformプロパティは、子エレメントにTransformが指定されていなくても、子エレメントに影響します.例えば、特性xdt:Transform="Replace"をsystemに置く.Web要素ではsystem.Web要素のすべてのサブ要素が変換ファイルの内容に置き換えられます.