Ich habe einen Webservice, der für verschiedene Umgebungen unterschiedliche Einstellungen benötigt (Debug, Test, Prod). Was ist der einfachste Weg, separate Konfigurationsdateien für diese verschiedenen Umgebungen einzurichten? Alles, was ich im Internet finde, sagt mir, wie man den Konfigurationsmanager benutzt, um Einstellungen abzurufen, aber nicht, wie man bestimmte Einstellungen basierend auf der aktuellen Build-Konfiguration findet.
Ich finde, dass mehrere Konfigurationsdateien für jede Umgebung gut funktionieren. zB:
Ich verlinke dann zu einer "Master" -Version mit dem eingebauten configSource-Attribut innerhalb der web.config oder app.config wie
%Vor%Ich würde dann den Buildprozess oder den Bereitstellungsprozess verwenden, um die korrekte Konfiguration für die Umgebung bis auf den Namen zu kopieren, den die web.config erwartet.
Jede Umgebung ist eindeutig beschriftet und kontrolliert, ohne dass unordentliche Platzhalter benötigt werden.
Eine Möglichkeit wäre, 3 verschiedene Konfigurationsdateien zu verwalten und sie bei der Bereitstellung über MSBuild auszuwählen.
%Vor%Wenn Sie eine MSBuild-Aufgabe verwenden, können Sie die spezifische Konfigurationsdatei umbenennen und an den richtigen Speicherort verschieben.
Immer noch etwas umständlich, hat dies den zusätzlichen Vorteil der Bewegung in Richtung einer One Step Build .
In der nächsten Version von Visual Studio wurde genau dieses Ding als neues Feature angekündigt. Vielleicht kannst du es in einem vorgefertigten Skript machen; Ersetzen der Konfigurationsdatei basierend auf der Variablen configurationname env.
Noch eine weitere Option: Wechseln Sie zum Speichern der Anwendungskonfiguration in einer Datenbank. Ich behalte die Typwerte in einer Datenbank, so dass die Verwaltung dieser Einstellungen zentralisierter ist. Dann hat meine Konfigurationsdatei eine Verbindungszeichenfolge, die nur für Config reserviert ist, und sie hat nur zwei Schlüssel: einen eindeutigen Anwendungs-ID-Wert und die Konfigurationsversion (d. H. "Dev", "test" usw.). Dann stelle ich einfach die richtige Konfigurationsdatei in die richtige Umgebung.
Das ist vielleicht nicht genau das, wonach Sie suchen; Es ist eine Alternative zur Erleichterung der Verwaltung Ihrer Konfigurationsdaten.
Das Problem, das ich mit Xian's Antwort habe, ist, dass wenn Sie eine neue Konfigurationseinstellung / einen neuen Endpunkt hinzufügen, Sie daran denken müssen, dies über mehrere Dateien hinweg zu tun. Wenn Sie dies vergessen, erfahren Sie nur, wenn Sie in der betroffenen Umgebung bereitstellen (nicht gut).
Stattdessen könnten Sie eine Master-Konfiguration haben und regex / xmlpoke (nant) / [Ihr-Favorit-Text-Manipulator] verwenden, um die Datei zur Build / Deploy-Zeit zu massieren und die richtigen Werte für jede Umgebung einzufügen alle Umgebungen in einer anderen Datei (aber entscheidend alle zusammen).
Dann müssen Sie nur noch die eine Konfigurationsdatei und eine Datei mit Umgebungseinstellungen pflegen - ich denke, das macht die Wartung auf lange Sicht einfacher und klarer.
Wir verwenden ein paar verschiedene Methoden.
Environment.MachineName.config (für Benutzer)
%Vor%#IF DEBUG debug.config
#IF TEST test.config
#IF PROD prod.config
%Vor%Es kann jedoch langweilig werden.
Verwenden Sie vorkompilierte Anweisungen. Beispielcode:
%Vor%Wo Laden der Konfigurationsdatei geladen.
Tags und Links c# visual-studio web-services