Очистка элемента xdt, если у него нет дочерних элементов

Итак, я начинаю играть с 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>

Вот мой web.config после install.xtd

  <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>

Есть ли способ избавиться от тега?


person Lareau    schedule 18.02.2015    source источник


Ответы (1)


Похоже, вы можете указать несколько преобразований для элемента. Поэтому вы можете удалить содержимое из своей установки, а затем проверить, есть ли у элемента дочерние элементы, если не удалить элемент.

<?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>
person chris    schedule 17.06.2015
comment
вау, спасибо, я постараюсь проверить ваше решение как можно скорее. Мне придется заново освежить мой код, это было некоторое время. - person Lareau; 19.06.2015
comment
спасибо, я попробовал это сегодня утром, и это сработало как шарм. Хорошая информация, чтобы знать. - person Lareau; 22.06.2015