web.config変換のドキュメントはあちこちで読むことができますが、誰も議論していないように見える2つの白象があります。
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>
明らかに、 xpath変数の概念@name=$name
に基づいて構文を作成しましたが、この例は、その機能が必要な理由を示しています。これはサポートされていますか?これを利用するには、構文をどのように調整する必要がありますか?文字列リテラルを入力することもできますが、これが可能かどうかを知りたいだけです。
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
これらの2つのアプローチはさておき、ターゲティングとそのすべての子ノードを削除するにはどうすればよいでしょうか。