您可以阅读 web.config 转换文档 here和 there ,但有两只白象似乎没人讨论:
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>
假设我想完全删除
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 variable concepts ,但这个例子说明了为什么我想要这个功能。这是支持的吗?我必须如何调整我的语法以利用这一点?我可以输入字符串文字,但我只想知道这是否可行。我可能会尝试删除
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
及其所有子节点?
最佳答案
问题在于 assemblyBinding 标记上的命名空间属性。
删除 AspNetHelper 引用对我有用:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly xdt:Transform="Remove"
xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Microsoft.VisualStudio.Enterprise.AspNetHelper')">
</dependentAssembly>
</assemblyBinding>
</runtime>
关于visual-studio-2010 - Web.config 转换 - 缺少的手册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12792325/