199 votes

Est-il possible de faire un « remplacer ou insérer » à l’aide de la transformation de web.config ?

Je suis en utilisant le web.config transformation comme décrit dans le post afin de générer des configs pour des environnements différents.

http://vishaljoshi.blogspot.com/2009/03/web-deployment-webconfig-transformation_23.html

Je peux faire un "Remplacer" la transformation par la mise en correspondance sur la clé, par exemple

<add key="Environment" value="Live" xdt:Transform="Replace" xdt:Locator="Match(key)" />

Et je peux le faire "Inserts" par exemple

<add key="UseLivePaymentService" value="true" xdt:Transform="Insert" />

Mais ce que je voudrais vraiment trouver utile, est une ReplaceOrInsert transformation, comme je ne peux pas toujours compter sur l'origine de fichier de config avoir/ne pas avoir une clé donnée.

Est-il possible de faire cela?

142voto

ADW334034 Points 540

En collaboration avec xdt:Transform = « Supprimer » utiliser xdt:Transform = « InsertIfMissing » en VS2012.

108voto

an phu Points 823

J’ai trouvé une solution à bas prix. Il n’est pas assez et ne fonctionne pas très bien si vous avez beaucoup d’éléments dont il faut « Remplacer ou insérer ».

Faire un « supprimer » puis un « InsertAfter | InsertBefore ».

Par exemple,

8voto

Dan Points 41

Une meilleure méthode pour moi a été d'insérer l'élément uniquement si elle n'existe pas puisque je ne suis que la définition de certains attributs. Suppression de l'élément serait jeter tous les autres attributs de l'élément principal si elles existaient.

exemple: web.config (sans élément)

<serviceBehaviors>
    <behavior name="Wcf.ServiceImplementation.AllDigitalService_Behavior">
        <serviceMetadata httpGetEnabled="true" />
    </behavior>
</serviceBehaviors>

web.config (avec élément)

<serviceBehaviors>
    <behavior name="Wcf.ServiceImplementation.AllDigitalService_Behavior">
        <serviceDebug httpsHelpPageEnabled="true" />
        <serviceMetadata httpGetEnabled="true" />
    </behavior>
</serviceBehaviors>

En utilisant le Localisateur avec une expression XPath, j'ai ajouter le nœud s'il n'existe pas, puis mis mon attribut:

<serviceDebug xdt:Transform="Insert"
  xdt:Locator="XPath(/configuration/system.serviceModel/behaviors/serviceBehaviors/behavior[not(serviceDebug)])" />
<serviceDebug includeExceptionDetailInFaults="true" xdt:Transform="SetAttributes" />

les deux résultant web.les fichiers de configuration ont includeExceptionDetailInFaults="true", et le second conserve la httpsHelpPageEnabled attribut où le supprimer/insérer la méthode ne serait pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X