Замена шаблона на основе токенизации в web.config.token

Я использую 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._-]*?__'

Надеюсь, это поможет кому-то другому.


comment
Я не вижу проблемы, которую вы описываете, вы можете добавить пример?   -  person Giulio Vian    schedule 22.07.2016
comment
Автор задачи Tokenizer здесь. Не могли бы вы пояснить, что вы подразумеваете под «двумя переменными для каждой строки»? Я могу видеть только одну переменную на строку в приведенном вами примере?   -  person Harshil Lodhi    schedule 24.07.2016
comment
@HarshilLodhi Я изменил вопрос, так как нашел другой сценарий, который у меня не работал. Если вы хотите добавить это на форум GitHub, дайте мне знать.   -  person Chris    schedule 08.08.2016
comment
Мне только что пришлось сделать это снова на новом экземпляре сборки, место для изменения сценария PowerShell можно найти здесь: C: \ agent \ tasks \ Tokenizer \ 1.1.2   -  person Chris    schedule 16.11.2016
comment
У меня та же проблема, что и в примере ‹host name = cache1 .__ ENVIRONMENT __.__ DOMAIN__ cachePort = 1 /›. Токенизатор будет искать одну переменную ENVIRONMENT __.__ DOMAIN вместо двух предполагаемых переменных ENVIRONMENT и DOMAIN.   -  person Ingo Strauch    schedule 29.08.2017
comment
Привет, Инго, вы пробовали изменить регулярное выражение в сценарии PowerShell, как показано выше? Он находится на сервере сборки, расположение по умолчанию c: \ Agent \ tasks \ Tokenizer \. Если вы добавите? это позволит правильно токенизировать обе переменные   -  person Chris    schedule 30.08.2017