Kennt jemand gute Tools/Dienstprogramme zum Verwalten von Web.Config
Dateien zwischen verschiedenen Build/Deployment-Umgebungen?Verwalten komplexer Web.Config-Dateien zwischen Implementierungsumgebungen
Zum Beispiel habe ich ein WCF-Projekt, das in der Entwicklung ich SSL nicht aktivieren möchte, aber ich möchte es in der Produktion aktiviert. Ich möchte verschiedene Logging-Einstellungen, verschiedene DB-Verbindungszeichenfolgen, unterschiedliche Fehlerbehandlung, verschiedene Dateipfade ... Sogar einige verschiedene Unity-Framework-Bindungen (verdrahte Mocks für Komponententests anstelle der realen Objekte für die Bereitstellung).
Die Pflege einzelner Kopien der Web.Config
ist ein Problem, denn das Hinzufügen eines neuen Webdienstes bedeutet, dass mehrere Dateien bearbeitet und synchronisiert werden müssen.
Ich habe auch bemerkt, dass, wenn Sie mit der Web.Config
zu viel von Hand Muck, Visual Studio wird ersticken, wenn Sie versuchen, den "Add item" Assistenten verwenden, sagen wir, einen neuen Web Service für WCF, da es muss die Web.Config ändern, um den Endpunkt hinzuzufügen, und kann ihn nicht mehr analysieren. Also muss ich aufpassen, die bestehende Web.Config nicht zu entwerten.
Ich dachte auch nur über einige Regex, um Ersatz zu tun und nur ein neues Web.Config
in einem Pre-Build-Befehl zu bauen. Das scheint die beste Option bisher zu sein ...
Irgendwelche anderen Ideen? Es scheint, dass dies ein sehr häufiges Problem sein sollte, da die Web.Config
wahrscheinlich niemals zwischen Entwicklungs- und Produktionsbereitstellungen identisch sein sollte.
Update:
ich eine schnelle Konsolenanwendung schreiben entschieden, dass alle XML-Dateien in einem bestimmten Verzeichnis nehmen und sie zu einem verschmelzen und nur bestimmte Dateien auf der Grundlage der Name.
So kann ich in einem Verzeichnis machen:
WebConfig_All
<configuration>
<configSections>
...
</configSections>
<system.web>
...
</system.web>
</configuration>
connectionStrings_Debug
<configuration>
<connectionStrings>
<add name="connstr" connectionString="...dev..." />
</connectionStrings>
</configuration>
connectionStrings_Release
<configuration>
<connectionStrings>
<add name="connstr" connectionString="...prod..." />
</connectionStrings>
</configuration>
Dann mein Kommandozeilen-Tool, führen und in der Konfiguration (Debug, Veröffentlichung, kundenspezifische ...) passieren Und es wird alle Dateien zusammenführen, die _ <Konfiguration> `in _All" or
beenden.
So jetzt habe ich 80% meiner Web.Config in einer einzigen WebConfig_All
Datei, und die 20% benutzerdefinierte Zeug in separaten Dateien pro Build-Konfiguration. Ich kann dann mein Kommandozeilen-Tool als Pre-Build-Aufgabe in VisualStudio, oder von NAnt, oder wo immer ich will ...
Ich habe auch meine XML-Merge-Logik gut genug Sachen wie zu handhaben:
<x>
<y a="1">
<z a="1"/>
</y>
</x>
merge mit
<x>
<y a="1">
<z a="2"/>
</y>
<y a="2"/>
</x>
Ergebnisse in:
<x>
<y a="1">
<z a="1"/>
<z a="2"/>
</y>
<y a="2"/>
</x>
Blick so weit gut .. . :)
Followup:
Dieses Thema ist ein wenig alt jetzt, also wollte ich darauf hinweisen, dass Visual Studio 2010 verfügt über eine Funktion web.config Transformationen zu tun eingebaut: http://msdn.microsoft.com/en-us/vstudio/Video/ff801895
Natürlich im typischen Microsoft Mode nur 50% der Art und Weise zu implementieren, funktioniert es nur für Web-Projekte mit Web-Deployment. Es ist ein Plugin-Transformationen in anderen Projekten zu ermöglichen, hier zu finden: http://www.hanselman.com/blog/SlowCheetahWebconfigTransformationSyntaxNowGeneralizedForAnyXMLConfigurationFile.aspx
Sie auch ein Tool wie BuildMaster verwenden könnte Konfigurationsdateien verwalten (zusammen mit Builds, Tests, DB-Skripte, etc ...)
Ich mag die Verwendung der ConfigSource-Attribut. Vielleicht kann ich das irgendwie einbeziehen. Es wäre schön, wenn VisualStudio sie automatisch zur Build-Zeit übersetzen und die Marcos von den Run-Tools verwenden könnte ... so könnten Sie "configSource = Config \ $ (ConfigurationName) \ My.Config" angeben – CodingWithSpike
Dies ist eine großartige Lösung! Wo ich bin, verwenden die Entwickler Visual Studio für die Entwicklungsarbeit, dann haben wir eine Build-Maschine, die CruiseControl und NAnt verwendet, die die verschiedenen Releases erstellt (Test, Bühne, Produktion, ...). Das ist perfekt für uns, weil wir einfach eine NAnt-Aufgabe erstellen können, um die entsprechenden Konfigurationsdateien auf Basis der zu erstellenden Version zu kopieren (oder Sie könnten MSBuild oder Visual Studio verwenden, um das Gleiche zu tun, wenn es Ihrer Umgebung besser entspricht). –