清除没有子元素的 xdt 元素
Clearing out xdt element if it has no children
所以我开始玩 nuget,它是 web.config install/uninstall.xdt 值。
我的问题是,xdt:Transform 是否会清除空元素。我在这里没有找到任何东西。
https://msdn.microsoft.com/en-us/library/dd465326%28v=vs.110%29.aspx
这是我的例子。
我现在的Web.config.install.xdt是这样的
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.web>
<compilation xdt:Transform="InsertIfMissing">
<assemblies xdt:Transform="InsertIfMissing">
<add xdt:Transform="InsertIfMissing" xdt:Locator="Match(assembly)" assembly="MyAssembly, Version=4.5.4.0, Culture=neutral, PublicKeyToken=asdfasdfasdfasdf" />
</assemblies>
</compilation>
</system.web>
</configuration>
我的卸载看起来像这样
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.web>
<compilation>
<assemblies>
<add xdt:Transform="Remove" xdt:Locator="Match(assembly)" assembly="MyAssembly, Version=4.5.4.0, Culture=neutral, PublicKeyToken=asdfasdfasdfasdf" />
</assemblies>
</compilation>
</system.web>
</configuration>
这是我之前的web.config(简体)
<system.web>
<authentication mode="None" />
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
</system.web>
这是我在 install.xtd
之后的 web.config
<system.web>
<authentication mode="None" />
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add assembly="MyAssembly, Version=4.5.4.0, Culture=neutral, PublicKeyToken=asdfasdfasdfasdf" />
</assemblies>
</compilation>
<httpRuntime targetFramework="4.5" />
</system.web>
这是我卸载后的web.config
<system.web>
<authentication mode="None" />
<compilation debug="true" targetFramework="4.5">
<assemblies>
</assemblies>
</compilation>
<httpRuntime targetFramework="4.5" />
</system.web>
有什么方法可以去掉这个标签吗?
您似乎可以在一个元素上指定多个转换。因此,您可以从安装中删除内容,然后检查该元素是否有子元素,如果没有则删除该元素。
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.web>
<compilation>
<assemblies>
<add xdt:Transform="Remove" xdt:Locator="Match(assembly)" assembly="MyAssembly, Version=4.5.4.0, Culture=neutral, PublicKeyToken=asdfasdfasdfasdf" />
</assemblies>
<assemblies xdt:Locator="Condition(count(*) = 0)" xdt:Transform="Remove"/>
</compilation>
</system.web>
</configuration>
所以我开始玩 nuget,它是 web.config install/uninstall.xdt 值。
我的问题是,xdt:Transform 是否会清除空元素。我在这里没有找到任何东西。 https://msdn.microsoft.com/en-us/library/dd465326%28v=vs.110%29.aspx
这是我的例子。
我现在的Web.config.install.xdt是这样的
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.web>
<compilation xdt:Transform="InsertIfMissing">
<assemblies xdt:Transform="InsertIfMissing">
<add xdt:Transform="InsertIfMissing" xdt:Locator="Match(assembly)" assembly="MyAssembly, Version=4.5.4.0, Culture=neutral, PublicKeyToken=asdfasdfasdfasdf" />
</assemblies>
</compilation>
</system.web>
</configuration>
我的卸载看起来像这样
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.web>
<compilation>
<assemblies>
<add xdt:Transform="Remove" xdt:Locator="Match(assembly)" assembly="MyAssembly, Version=4.5.4.0, Culture=neutral, PublicKeyToken=asdfasdfasdfasdf" />
</assemblies>
</compilation>
</system.web>
</configuration>
这是我之前的web.config(简体)
<system.web>
<authentication mode="None" />
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
</system.web>
这是我在 install.xtd
之后的 web.config <system.web>
<authentication mode="None" />
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add assembly="MyAssembly, Version=4.5.4.0, Culture=neutral, PublicKeyToken=asdfasdfasdfasdf" />
</assemblies>
</compilation>
<httpRuntime targetFramework="4.5" />
</system.web>
这是我卸载后的web.config
<system.web>
<authentication mode="None" />
<compilation debug="true" targetFramework="4.5">
<assemblies>
</assemblies>
</compilation>
<httpRuntime targetFramework="4.5" />
</system.web>
有什么方法可以去掉这个标签吗?
您似乎可以在一个元素上指定多个转换。因此,您可以从安装中删除内容,然后检查该元素是否有子元素,如果没有则删除该元素。
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<system.web>
<compilation>
<assemblies>
<add xdt:Transform="Remove" xdt:Locator="Match(assembly)" assembly="MyAssembly, Version=4.5.4.0, Culture=neutral, PublicKeyToken=asdfasdfasdfasdf" />
</assemblies>
<assemblies xdt:Locator="Condition(count(*) = 0)" xdt:Transform="Remove"/>
</compilation>
</system.web>
</configuration>