你可以在这里查看和那里阅读有关web.config转换的文档,但似乎没有人讨论以下两个难题:
假设我想要完全删除与xpath
请注意,
除了这两种方法之外,您如何删除目标
- 如何在
Condition
或XPath
转换中执行变量替换,以及... Locator
可以被有意义地嵌套在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>
假设我想要完全删除与xpath
//runtime/assemblyBinding/dependentAssembly[assemblyIdentity@name='System.Web.Mvc']
匹配的dependentAssembly
节点及其子节点。为了做到这一点,我可能需要像这样的代码:<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>
显然,我基于xpath variable concepts编造了@name=$name
的语法,但这个例子展示了我为什么需要这个功能。这个功能被支持吗?我需要如何调整我的语法来利用它?我可以放入一个字符串文字,但我只是想知道是否可能。
另一种我试图删除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
及其所有子节点?