Web.config transforma - o manual em falta
Você pode ler a documentação de transformações web.configAqui elá, 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?