web.config.token中基于标记的模式替换

时间:2016-07-22 08:05:38

标签: web-config continuous-integration tokenize release-management web.config-transform

我正在使用Release Manager 2015来部署我的应用程序。

我正在使用Microsoft的Extension Utilities包来执行此操作:

Extension Utility Pack - Documentation

这简单地说明:

基于标记的模式替换

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._-]*?__'

希望这有助于其他人。

0 个答案:

没有答案