Преобразование Web.config - недостающее руководство

Вы можете прочитать документацию web.config transformsВот а такжетам, но есть два белых слона, которых никто не обсуждает:

How do you perform a variable substitution in a Condition or XPath transform, and... Can a Locator be meaningfully nested inside 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 и все его дочерние узлы?

Ответы на вопрос(3)

Ваш ответ на вопрос