Как применить преобразования конфигурации к внешнему файлу конфигурации - PullRequest
28 голосов
/ 10 ноября 2011

Я не могу найти пример моего вопроса в Интернете, и мне было интересно, если кто-нибудь знает решение.По сути, если в нашем файле web.config мы указываем на другой файл, например, так:

<configuration>
  <configSections />
  <appSettings file="AppSettings.config">
</configuration>

, то как нам применить преобразования к этому внешнему файлу?

По сути, я хочу создатьAppSettings.config, AppSettings.Debug.config, AppSettings.Release.config и запустить преобразование ... Возможно ли это?

Заранее спасибо,

Серхио

Ответы [ 3 ]

30 голосов
/ 13 февраля 2013

Есть несколько обходных путей:

Обходное решение 1

  • Запись AppSettings.Debug.config, AppSettings.Release.config с полными значениями (нес атрибутами преобразования)
  • В вашем web.config, используя преобразование, замените его соответствующим файлом:

web.debug.config

<appSettings file="AppSettings.debug.config" 
             xdt:Transform="SetAttributes" xdt:Locator="Match(file)"/>

web.release.config

<appSettings file="AppSettings.release.config" 
             xdt:Transform="SetAttributes" xdt:Locator="Match(file)"/>

Это менее чем идеально, вроде как отрицает цель преобразований, но может быть уместным в зависимости отСитуация, чем использование чего-то вроде SlowCheetah.

Обходной путь 2

Используйте задачу сборки TransformXml для преобразования ваших файлов во время сборки, как указано здесь и здесь

8 голосов
/ 10 ноября 2011

Существует проект плагина Visual Studio под названием Slow Cheetah , который берет идею преобразований и позволяет применять его к файлам, отличным от web.config, я не использовал его, но думаю, что он будетделай что хочешь.Скотт Хансельман вел блог .

2 голосов
/ 17 декабря 2018

Обходной путь 1 в принятом ответе поставил меня на правильный путь, но не сработал как есть, потому что преобразование не совсем правильно. Правильное преобразование просто

<appSettings file="AppSettings.debug.config" 
         xdt:Transform="SetAttributes"/>

Мне пришлось удалить xdt: Locator = "Match (file)", чтобы сам атрибут файла изменился. Преобразования Web Config объясняет, что Match (ключ) найдет элемент для изменения, но изменит только другие элементы узла, а не сам ключ локатора / соответствия. Для каждого файла конфигурации будет только один appSetting, поэтому нам не нужно искать конкретный экземпляр.

(У меня недостаточно репутации, чтобы комментировать принятый ответ, поэтому я опубликовал это как еще один ответ.)

...