Я использую преобразование 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, поскольку я не всегда могу полагаться на исходный файл конфигурации, имеющий / не имеющий определенный ключ.
Есть какой-либо способ сделать это?
asp.net
web-config-transform
xslt
xdt-transform
Крис Хейнс
источник
источник
Ответы:
Я нашел дешевый обходной путь. Это не красиво и не будет работать очень хорошо, если у вас есть много элементов, которые должны быть «Заменить или вставить».
Сделайте «Удалить», а затем «InsertAfter | InsertBefore».
Например,
источник
В сочетании с
xdt:Transform="Remove"
использованиемxdt:Transform="InsertIfMissing"
в VS2012.источник
Remove
задача удаляет только первое вхождение. Некоторые элементы могут иметь несколько вхождений. Я не могу представить, что вы захотите этого, но тогда это удалит первое вхождение и пропуститInsertIfMissing
задачу. Но ты был бы прав, если бы использовалRemoveAll
вместо этого.Используйте
InsertIfMissing
преобразование, чтобы убедиться, что appSetting существует.Затем используйте
Replace
преобразование, чтобы установить его значение.Вы также можете использовать
SetAttributes
преобразование вместоReplace
. Разница в том, чтоSetAttributes
не касается дочерних узлов.Эти методы намного лучше, чем удаление + вставка, потому что существующие узлы не перемещаются в конец своего родительского узла. Новые узлы добавляются в конце. Существующие узлы остаются там, где они находятся в исходном файле.
Этот ответ относится только к более новым версиям Visual Studio (2012 или более поздней версии).
источник
Лучшим способом для меня было вставить элемент, только если он не существует, так как я устанавливаю только определенные атрибуты. Удаление элемента отбросило бы любые другие атрибуты основного элемента, если бы они существовали.
пример: web.config (без элемента)
web.config (с элементом)
Используя локатор с выражением XPath, я добавляю узел, если он не существует, и затем устанавливаю свой атрибут:
оба результирующих файла web.config имеют includeExceptionDetailInFaults = "true", а второй сохраняет атрибут httpsHelpPageEnabled, а метод удаления / вставки - нет.
источник