仅当 app.debug.config 中的标志为 true 时,才转换 app.config 条目



我想在配置Debug时执行xdt:Transform,但前提是app.debug.config中条目的值是某个值,让我们说true保持简单。例如:

应用配置

<?xml version="1.0" encoding="utf-8" ?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<appSettings> 
<add key="Value.First" value="foo" />
<add key="Value.Second" value="foo" />
<add key="Value.Third" value="foo" />
</appSettings>
</configuration>

App.Debug.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<appSettings>
<!--Convenient flag to indicate if transform should happen-->
<add key="Perform.Transform.If.True" value="true" xdt:Transform="Insert" />
<!--Should only happen if the above is true-->
<add key="Value.First" value="bar" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
<add key="Value.Second" value="bar" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
<add key="Value.Third" value="bar" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
</appSettings>
</configuration>

我希望仅当键Perform.Transform.If.True设置为true时,才转换 app.config 中的所有Value.*条目。 如果是false什么都不应该发生。原因是有时在测试期间,我们希望快速打开和关闭由配置文件控制的内容。

我已经看到了匹配、条件、XPath 等内容的Locator选项,但似乎没有一个允许来自另一个条目的条件。 这可以通过慢猎豹/xdt 转换来完成吗?

好吧,使用XPath找到了一种迂回的方式:

<add
key="Value.First" 
value="bar" 
xdt:Transform="Replace"
xdt:Locator="XPath(//appSettings/add[@key='Perform.Transform.If.True' and translate(@value, 'ERTU', 'ertu')='true']/../add[@key='Value.First'])" 
/>

如果未true该标志,则无法解析路径。translate使其不区分大小写。

未能解决(是false)会导致编译警告,这很烦人,但由于这是一个调试工具,我们可以忍受。

相关内容

  • 没有找到相关文章

最新更新