Existe-t-il un moyen de remplacer ou d’insérer en utilisant la transformation web.config?

J’utilise la transformation web.config comme décrit dans le message ci-dessous afin de générer des configurations pour différents environnements.

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

Je peux faire une transformation “Remplacer” en faisant correspondre la clé, par exemple

 

Et je peux faire “Inserts” par exemple

  

Mais ce que je trouverais vraiment utile, c’est une transformation ReplaceOrInsert, car je ne peux pas toujours compter sur le fichier de configuration d’origine qui n’a pas de clé.

Est-ce qu’il y a un moyen de faire ça?

J’ai trouvé une solution de rechange bon marché. Ce n’est pas joli et ça ne fonctionnera pas très bien si vous avez beaucoup d’éléments à remplacer par “Remplacer ou insérer”.

Faites un “Supprimer” puis un “InsertAfter | InsertBefore”.

Par exemple,

      

En conjonction avec xdt:Transform="Remove" utilisez xdt:Transform="InsertIfMissing" dans VS2012.

      

Utilisez la transformation InsertIfMissing pour vous assurer que l’appSetting existe.
Utilisez ensuite la transformation Replace pour définir sa valeur.

     

Vous pouvez également utiliser la transformation SetAtsortingbutes au lieu de Replace . La différence est que SetAtsortingbutes ne touche pas les nœuds enfants.

     

Ces techniques sont bien meilleures que celles de remove + insert car les nœuds existants ne sont pas déplacés au bas de leur nœud parent. Les nouveaux nœuds sont ajoutés à la fin. Les nœuds existants restnt là où ils se trouvent dans le fichier source.

Cette réponse s’applique uniquement aux nouvelles versions de Visual Studio (2012 ou plus récentes).

Une meilleure méthode pour moi était d’insérer l’élément seulement s’il n’existe pas, car je ne fais que définir certains atsortingbuts. La suppression de l’élément rejetterait tous les autres atsortingbuts de l’élément principal s’ils existaient.

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

      

web.config (avec élément)

       

En utilisant le localisateur avec une expression XPath, j’ajoute le nœud s’il n’existe pas, puis définit mon atsortingbut:

   

Les deux fichiers web.config résultants ont includeExceptionDetailInFaults = “true” et le second conserve l’atsortingbut httpsHelpPageEnabled où la méthode remove / insert ne l’est pas.

Le ci-dessous crée une nouvelle clé est la même clé n’est pas présente. s’il est présent, il remplace simplement celui existant.