7

web.config変換のドキュメントはあちこちで読むことができます、誰も議論していないように見える2つの白象があります。

  1. Conditionまたは変換で変数置換をどのように実行し、XPath...
  2. を意味のある形でネストできます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>

dependentAssemblyxpathに一致するノードとその子を完全に消去したいとします//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つのアプローチはさておき、ターゲティングとそのすべての子ノードを削除するにはどうすればよいでしょうか。

4

3 に答える 3

9

問題は、assemblyBinding タグの名前空間属性です。

AspNetHelper 参照を削除すると、次のように機能します。

<runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly xdt:Transform="Remove" 
                           xdt:Locator="Condition(./_defaultNamespace:assemblyIdentity/@name='Microsoft.VisualStudio.Enterprise.AspNetHelper')">
        </dependentAssembly>
    </assemblyBinding>
</runtime>
于 2013-02-23T13:18:39.587 に答える
3

このコードは私のために働いてしまいました。変換をdependentAssembly ノードに移動しました。

<runtime>
  <assemblyBinding>
    <!-- ending /dependentAssembly is required or tranforms fail -->
    <dependentAssembly xdt:Transform="Remove" xdt:Locator="Condition(assemblyIdentity/@name='Microsoft.VisualStudio.QualityTools.HostAdapters.ASPNETAdapter')"  ></dependentAssembly>
    <dependentAssembly xdt:Transform="Remove" xdt:Locator="Condition(assemblyIdentity/@name='Microsoft.VisualStudio.QualityTools.Common')"  ></dependentAssembly>
    <dependentAssembly xdt:Transform="Remove" xdt:Locator="Condition(assemblyIdentity/@name='Microsoft.VisualStudio.QualityTools.ExecutionCommon')"></dependentAssembly>
    <dependentAssembly xdt:Transform="Remove" xdt:Locator="Condition(assemblyIdentity/@name='Microsoft.VisualStudio.QualityTools.Resource')"  ></dependentAssembly>
  </assemblyBinding>
</runtime>  
于 2012-10-22T16:47:08.103 に答える