Web.config transformiert - das fehlende Handbuch

Sie können die Dokumentation zu web.config transforms lesenHier undDort, aber es gibt zwei weiße Elefanten, die niemand zu diskutieren scheint:

Wie führt man eine Variablensubstitution in a durch?Condition oderXPath transformieren und ...Kann einLocator Seinsinnvoll verschachtelt in einemTransform?

Lassen Sie mich ein Beispiel nennen, das von einer dieser Optionen profitieren würde. Angenommen, ich habe Folgendes:

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

Angenommen, ich möchte das vollständig löschendependentAssembly Knoten und seine untergeordneten Elemente, die dem xpath entsprechen//runtime/assemblyBinding/dependentAssembly[assemblyIdentity@name='System.Web.Mvc']. Dazu möchte ich vielleicht Folgendes:

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

Nun, offensichtlich habe ich die Syntax erfunden@name=$name beyogen aufxpath variable Konzepte, aber dieses Beispiel zeigt, warum ich diese Funktion haben möchte. Wird das unterstützt? Wie muss ich meine Syntax anpassen, um dies zu nutzen? Ich könnte ein String-Literal eingeben, aber ich möchte nur wissen, ob dies möglich ist.

Auf eine andere Weise könnte ich versuchen, das zu löschendependentAssembly Knoten ist mit diesem:

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

Beachten Sie dieTransform befindet sich auf einem übergeordneten Knoten, und der Locator befindet sich auf einem Blattknoten. Ist das oben Genannte legitim? Die Idee ist, nur die zu entfernendependantAssembly Knoten mit einer internen Locator-Übereinstimmung.

Abgesehen von diesen beiden Ansätzen, wie würden Sie vorgehen, um das Targeting zu löschen?dependantAssembly und alle seine untergeordneten Knoten?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage