Я использую Release Manager 2015 для развертывания своего приложения.
Для этого я использую пакет Microsoft Extension Utilities:
Extension Utility Pack - документация
Здесь просто говорится:
Замена шаблона на основе токенизации
This task finds the pattern __<pattern>__ and replaces the same with the value from the variable with name <pattern>.
Eg. If you have a variable defined as foo with value bar,
on running this task on a file that contains __foo__ will be changed to bar.
Поэтому в моем файле web.config.token я просто добавляю:
<add name="ADConnectionString" connectionString="__ADConnectionString__" />
а в диспетчере релизов под переменными создается переменная с именем ADConnectionString, которая затем берется во время шага и заменяется.
Мой вопрос в том, что я не могу найти способ заменить токенизированную строку внутри строки.
<add name="CreateTextWriter" initializeData="directory=D:\__WEBLOGDIR__\__ENVIRONMENT__; basename=Web" />
Однако это будет работать
<host name="cache1.__ENVIRONMENT__.__DOMAIN__" cachePort="1"/>
не буду. Это связано с тем, что для сопоставления используется RegEx.
$regex = '__[A-Za-z0-9._-]*__'
$matches = select-string -Path $tempFile -Pattern $regex -AllMatches | % { $_.Matches } | % { $_.Value }
Это будет соответствовать всей строке, а не каждой токенизированной строке. Чтобы обойти это, я немного изменил RegEx, чтобы не жадничать в его выборе.
$regex = '__[A-Za-z0-9._-]*?__'
Надеюсь, это поможет кому-то другому.