Est-il possible de faire un “Remplacer Ou Insérer” à l'aide de web.config transformation?
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 correspondance sur la touche, 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?
- le lien que vous avez fourni ne fonctionne pas comme maintenant. Avez-vous un autre lien pour comprendre le concept facilement?
- le lien fonctionne très bien pour moi
Vous devez vous connecter pour publier un commentaire.
J'ai trouvé un bon marché une solution de contournement. Ce n'est pas joli et ne fonctionne pas très bien si vous avez beaucoup d'éléments qu'il faut Remplacer Ou Insérer".
Faire un "Supprimer", puis un "InsertAfter|InsertBefore".
Par exemple,
En conjonction avec
xdt:Transform="Remove"
utilisationxdt:Transform="InsertIfMissing"
dans VS2012.Remove
tâche supprime uniquement la première occurrence. Certains éléments peuvent avoir plusieurs occurrences. Je ne peux pas imaginer que vous voulez, mais alors il faudrait supprimer la première occurrence et de passer l'InsertIfMissing
tâche. Mais vous auriez eu droit si il a utiliséRemoveAll
à la place.Utiliser le
InsertIfMissing
transformation pour s'assurer que le appSetting existe.Ensuite, utilisez la
Replace
transformation pour régler sa valeur.Vous pouvez également utiliser la
SetAttributes
transformation au lieu deReplace
. La différence est queSetAttributes
ne pas toucher les nœuds enfants.Ces techniques sont beaucoup mieux que de supprimer+insert parce que les nœuds ne sont pas déplacés vers le bas de son nœud parent. De nouveaux nœuds sont ajoutés à la fin. Les nœuds existants rester là où ils sont dans le fichier source.
Cette réponse s'applique uniquement aux nouvelles versions de Visual Studio (2012 ou plus récent).
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)
web.config (avec élément)
En utilisant le Localisateur avec une expression XPath, j'ai ajouter le nœud s'il n'existe pas, puis mis mon attribut:
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.