194

さまざまな環境の構成を生成するために、以下の投稿で説明されているように web.config 変換を使用しています。

http://vishaljoshi.blogspot.com/2009/03/web-deployment-webconfig-transformation_23.html

キーを照合することで「置換」変換を行うことができます。

<add key="Environment" value="Live" xdt:Transform="Replace" xdt:Locator="Match(key)" />

そして、「挿入」を行うことができます。

<add key="UseLivePaymentService" value="true" xdt:Transform="Insert" />

しかし、元の構成ファイルに特定のキーがある/ないことに常に依存できるとは限らないため、ReplaceOrInsert変換が本当に便利だと思います。

これを行う方法はありますか?

4

4 に答える 4

135

VS2012でのxdt:Transform="Remove"使用と合わせて。xdt:Transform="InsertIfMissing"

<authorization xdt:Transform="Remove" />
<authorization xdt:Transform="InsertIfMissing">
  <deny users="?"/>
  <allow users="*"/>
</authorization>
于 2013-05-21T20:46:02.870 に答える
109

安価な回避策を見つけました。「置換または挿入」する必要がある要素がたくさんある場合、それはきれいではなく、うまく機能しません。

「削除」を実行してから、「InsertAfter|InsertBefore」を実行します。

例えば、

<authorization xdt:Transform="Remove" />
<authorization xdt:Transform="InsertAfter(/configuration/system.web/authentication)">
  <deny users="?"/>
  <allow users="*"/>
</authorization>
于 2011-05-12T15:58:37.110 に答える
7

私にとってより良い方法は、特定の属性のみを設定しているため、要素が存在しない場合にのみ要素を挿入することでした。要素を削除すると、メイン要素の他の属性が存在する場合は破棄されます。

例: web.config (要素なし)

<serviceBehaviors>
    <behavior name="Wcf.ServiceImplementation.AllDigitalService_Behavior">
        <serviceMetadata httpGetEnabled="true" />
    </behavior>
</serviceBehaviors>

web.config (要素あり)

<serviceBehaviors>
    <behavior name="Wcf.ServiceImplementation.AllDigitalService_Behavior">
        <serviceDebug httpsHelpPageEnabled="true" />
        <serviceMetadata httpGetEnabled="true" />
    </behavior>
</serviceBehaviors>

Locator と XPath 式を使用して、ノードが存在しない場合はノードを追加し、属性を設定します。

<serviceDebug xdt:Transform="Insert"
  xdt:Locator="XPath(/configuration/system.serviceModel/behaviors/serviceBehaviors/behavior[not(serviceDebug)])" />
<serviceDebug includeExceptionDetailInFaults="true" xdt:Transform="SetAttributes" />

結果の両方の web.config ファイルには includeExceptionDetailInFaults="true" があり、2 番目のファイルには httpsHelpPageEnabled 属性が保持されますが、削除/挿入メソッドでは保持されません。

于 2011-07-19T05:28:07.917 に答える