Web.config transforma - o manual em falta

Você pode ler a documentação de transformações web.configAqui e, mas há dois elefantes brancos que ninguém parece discutir:

Como você executa uma substituição de variável em umCondition ouXPath transformar e ...Pode umLocator estarsignificativamente aninhado dentro de umTransform?

Deixe-me dar um exemplo que se beneficiaria de qualquer uma dessas opções. Suponha que eu tenha isto:

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

Suponha que eu queira apagar completamente odependentAssembly nó e seus filhos, que corresponde ao xpath//runtime/assemblyBinding/dependentAssembly[assemblyIdentity@name='System.Web.Mvc']. Para fazer isso, eu poderia querer algo assim:

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

Bem, obviamente eu inventei a sintaxe@name=$name baseado emconceitos de variáveis ​​do xpath, mas este exemplo demonstra porque eu quero esse recurso. Isso é suportado? Como devo ajustar minha sintaxe para aproveitar isso? Eu poderia colocar uma string literal, mas eu só quero saber se isso é possível.

Outra maneira que eu poderia tentar excluir odependentAssembly nó, é com isso:

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

Observe oTransform está em um nó de pai grande e o localizador está no nó de folha. O acima é legítimo? A ideia é remover apenas odependantAssembly nó que possui uma correspondência de localizador interna.

Estas duas abordagens à parte, como você faria para excluir a segmentaçãodependantAssembly e todos os seus nós filhos?

questionAnswers(3)

yourAnswerToTheQuestion