Преобразование Web.config - недостающее руководство
Вы можете прочитать документацию web.config transformsВот а такжетам, но есть два белых слона, которых никто не обсуждает:
How do you perform a variable substitution in aCondition
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
и все его дочерние узлы?