您可以在这里和那里阅读 web.config 转换文档,但是似乎没有人讨论两个白象:
- 您如何在 a
Condition
或XPath
转换中执行变量替换,以及... - a
Locator
可以有意义地嵌套在 a 中Transform
吗?
让我举一个可以从这两种选择中受益的例子。假设我有这个:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="1.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
假设我想完全擦除dependentAssembly
与 xpath 匹配的节点及其子节点//runtime/assemblyBinding/dependentAssembly[assemblyIdentity@name='System.Web.Mvc']
。为此,我可能想要这样的东西:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity
name="System.Web.Mvc"
xdt:Remove
xdt:Locator="Condition(..[*@name=$name])"
/>
</dependentAssembly>
</assemblyBinding>
</runtime>
@name=$name
很明显,我根据xpath 变量概念编写了语法,但这个例子说明了为什么我想要那个特性。这支持吗?我必须如何调整我的语法以利用这一点?我可以输入一个字符串文字,但我只想知道这是否可能。
我可能尝试删除dependentAssembly
节点的另一种方法是:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1" xdt:Transform="Remove">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" xdt:Locator="Match(name)" />
</dependentAssembly>
</assemblyBinding>
</runtime>
请注意,Transform
它位于祖父节点上,而定位器位于叶节点上。以上合法吗?这个想法是只删除dependantAssembly
具有内部定位器匹配的节点。
除了这两种方法,您将如何删除定位dependantAssembly
及其所有子节点?