J'utilise la transformation web.config comme décrit dans l'article 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
<add key="Environment" value="Live" xdt:Transform="Replace" xdt:Locator="Match(key)" />
Et je peux faire des "insertions" par exemple
<add key="UseLivePaymentService" value="true" xdt:Transform="Insert" />
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 ayant / n'ayant pas une certaine clé.
Y a-t-il un moyen de faire ça?
asp.net
web-config-transform
xslt
xdt-transform
Chris Haines
la source
la source
Réponses:
J'ai trouvé une solution de contournement bon marché. Ce n'est pas joli et ne fonctionnera pas très bien si vous avez beaucoup d'éléments qui doivent être "Remplacer ou insérer".
Faites un "Remove" puis un "InsertAfter | InsertBefore".
Par exemple,
la source
En conjonction avec l'
xdt:Transform="Remove"
utilisationxdt:Transform="InsertIfMissing"
dans VS2012.la source
Remove
tâche supprime uniquement la première occurrence. Certains éléments peuvent avoir plusieurs occurrences. Je ne peux pas imaginer que vous souhaitiez cela, mais cela supprimerait la première occurrence et ignorerait laInsertIfMissing
tâche. Mais vous auriez eu raison s'il avait utilisé à laRemoveAll
place.Utilisez la
InsertIfMissing
transformation pour vous assurer que appSetting existe.Utilisez ensuite la
Replace
transformation pour définir sa valeur.Vous pouvez également utiliser la
SetAttributes
transformation au lieu deReplace
. La différence est queSetAttributes
cela ne touche pas les nœuds enfants.Ces techniques sont bien meilleures que supprimer + insérer car les nœuds existants ne sont pas déplacés vers le bas de leur nœud parent. Les nouveaux nœuds sont ajoutés à la fin. Les nœuds existants restent là où ils se trouvent dans le fichier source.
Cette réponse s'applique uniquement aux versions plus récentes de Visual Studio (2012 ou plus récentes).
la source
Une meilleure méthode pour moi était d'insérer l'élément uniquement s'il n'existe pas puisque je ne définis que certains attributs. La suppression de l'élément annulerait tous les autres attributs 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 je définis mon attribut:
les deux fichiers web.config résultants ont includeExceptionDetailInFaults = "true" et le second préserve l'attribut httpsHelpPageEnabled alors que la méthode remove / insert ne le ferait pas.
la source