Ich verwende die web.config-Transformation wie im folgenden Beitrag beschrieben, um Konfigurationen für verschiedene Umgebungen zu generieren.
http://vishaljoshi.blogspot.com/2009/03/web-deployment-webconfig-transformation_23.html
Ich kann eine "Ersetzen" -Transformation durchführen, indem ich den Schlüssel anpasse, z
<add key="Environment" value="Live" xdt:Transform="Replace" xdt:Locator="Match(key)" />
Und ich kann "Inserts" machen, zB
<add key="UseLivePaymentService" value="true" xdt:Transform="Insert" />
Was ich aber wirklich nützlich finden würde , ist eine ReplaceOrInsert-Umwandlung, da ich mich nicht immer darauf verlassen kann, dass die ursprüngliche Konfigurationsdatei einen bestimmten Schlüssel hat / nicht hat.
Gibt es eine Möglichkeit, dies zu tun?
asp.net
web-config-transform
xslt
xdt-transform
Chris Haines
quelle
quelle
Antworten:
Ich habe eine billige Problemumgehung gefunden. Es ist nicht schön und funktioniert nicht sehr gut, wenn Sie viele Elemente haben, die "Ersetzen oder Einfügen" sein müssen.
Führen Sie ein "Entfernen" und dann ein "InsertAfter | InsertBefore" durch.
Beispielsweise,
quelle
In Verbindung mit der
xdt:Transform="Remove"
Verwendungxdt:Transform="InsertIfMissing"
in VS2012.quelle
Remove
Aufgabe entfernt nur das erste Vorkommen. Einige Elemente können mehrfach vorkommen. Ich kann mir nicht vorstellen, dass Sie dies möchten, aber dann würde es das erste Vorkommen entfernen und dieInsertIfMissing
Aufgabe überspringen . Aber du hättest recht gehabt, wenn erRemoveAll
stattdessen verwendet hätte.Verwenden Sie die
InsertIfMissing
Transformation, um sicherzustellen, dass die appSetting vorhanden ist.Verwenden Sie dann die
Replace
Transformation, um den Wert festzulegen.Sie können auch die
SetAttributes
Transformation anstelle von verwendenReplace
. Der Unterschied besteht darin, dassSetAttributes
untergeordnete Knoten nicht berührt werden.Diese Techniken sind viel besser als Entfernen + Einfügen, da vorhandene Knoten nicht an den unteren Rand ihres übergeordneten Knotens verschoben werden. Neue Knoten werden am Ende angehängt. Bestehende Knoten bleiben dort, wo sie sich in der Quelldatei befinden.
Diese Antwort gilt nur für neuere Versionen von Visual Studio (2012 oder neuer).
quelle
Eine bessere Methode für mich war, das Element nur einzufügen, wenn es nicht existiert, da ich nur bestimmte Attribute setze. Durch Entfernen des Elements werden alle anderen Attribute des Hauptelements verworfen, sofern sie vorhanden sind.
Beispiel: web.config (ohne Element)
web.config (mit Element)
Mit dem Locator mit einem XPath-Ausdruck füge ich den Knoten hinzu, falls er nicht vorhanden ist, und setze dann mein Attribut:
Beide resultierenden web.config-Dateien haben includeExceptionDetailInFaults = "true" und die zweite behält das httpsHelpPageEnabled-Attribut bei, bei dem die Methode remove / insert dies nicht tun würde.
quelle