[asp.net] Есть ли способ сделать «Заменить или вставить» с помощью преобразования web.config?


1 Answers

В сочетании с xdt:Transform="Remove" используйте xdt:Transform="InsertIfMissing" в VS2012.

<authorization xdt:Transform="Remove" />
<authorization xdt:Transform="InsertIfMissing">
  <deny users="?"/>
  <allow users="*"/>
</authorization>
Question

Я использую преобразование 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, поскольку я не всегда могу полагаться на исходный файл конфигурации, имеющий / не имеющий определенного ключа.

Есть какой-либо способ сделать это?




Лучший метод для меня - вставить элемент только в том случае, если он не существует, поскольку я устанавливаю только определенные атрибуты. Удаление элемента будет отбрасывать любые другие атрибуты основного элемента, если они существуют.

Пример: 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 включаютExceptionDetailInFaults = "true", а второй сохраняет атрибут httpsHelpPageEnabled, где метод remove / insert не будет.




Related