仅当 app.debug.config 中的标志为真时才转换 app.config 条目
Transform app.config entries only if a flag in app.debug.config is true
我想在 Debug
配置中执行 xdt:Transform
但前提是 app.debug.config
中的条目值是特定值,比方说 true
保持简单。例如:
App.config:
<?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
则什么都不会发生。原因是有时在测试期间我们想快速打开和关闭由配置文件控制的东西。
我已经看到 Locator
的选项用于 Match、Conditional、XPath 等,但是 none 似乎允许 condition 来自另一个条目。可以用 slowcheetah/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
)会导致编译警告,这很烦人,但由于这是一个调试工具,我们可以接受。
我想在 Debug
配置中执行 xdt:Transform
但前提是 app.debug.config
中的条目值是特定值,比方说 true
保持简单。例如:
App.config:
<?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
则什么都不会发生。原因是有时在测试期间我们想快速打开和关闭由配置文件控制的东西。
我已经看到 Locator
的选项用于 Match、Conditional、XPath 等,但是 none 似乎允许 condition 来自另一个条目。可以用 slowcheetah/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
)会导致编译警告,这很烦人,但由于这是一个调试工具,我们可以接受。