2009-01-12 8 views
8

Gibt es einen Weg zur Laufzeit, um eine Anwendung app.config (current.config in new.config, Datei für Datei) zu wechseln. Ich habe einen Backup/Restore-Prozess, der seine eigene application.exe.config-Datei ersetzen muss. Ich habe dieses post gesehen, aber es beantwortet nicht, wie man das zur Laufzeit macht.Ist das Umschalten von app.config zur Laufzeit möglich?

Antwort

10

Stellt sich heraus, ich kann die .config-Datei für die neue austauschen und einen ConfigurationManager.RefreshSection (...) für jeden Abschnitt. Es wird von der neuen .config-Datei aktualisiert.

2

Können Sie die Anwendung neu starten, wenn Sie feststellen, dass Sie Dateien wechseln müssen? Wenn ja, müssen Sie nur die Dateien wechseln und neu starten. Jetzt ist das knifflige Bit , wenn. NET hält die Datei app.config geöffnet, während das Programm ausgeführt wird. Ich vermute es nicht, aber wenn der offensichtlichste Ansatz fehlschlägt, schlage ich vor, Sie haben eine zweite Anwendung (cfgswitcher.exe), die auf den Prozess mit einer in der Befehlszeile angegebenen PID wartet, um dann Konfigurationsdateien zu wechseln und neu zu starten ursprünglicher Prozess. Dann müsste Ihre App nur cfgswitcher.exe starten (indem sie eine eigene PID als Kommandozeilenargument übergibt) und beenden.

Wie gesagt, es lohnt sich, zuerst den offensichtlichen Ansatz auszuprobieren.

EDIT: Wenn Sie die Anwendung (oder sogar einen Teil davon in einer neuen AppDomain) nicht neu starten können, können verschiedene Aspekte von app.config (Assembly Bindings usw.) nicht geändert werden. Wenn Sie nur Ihre eigenen Konfigurationsabschnitte ändern möchten, dann schlage ich vor, Sie speichern sie in einer separaten Konfigurationsdatei und laden Sie sie wann immer Sie wollen.

+0

Ich kann die Anwendung nicht neu starten. – maxfridbe

0

Sehen Sie sich die Ereignisse an, die für Sie in der ApplicationSettingsBase-Klasse verfügbar sind. Es gibt PropertyChanged & SettingChanging, das Ihnen geben kann, was Sie brauchen.

Sie können auch die Datei ansehen und wenn sie sich geändert hat, rufen Sie die Reload-Methode auf, um die neuen Einstellungen zu erhalten.

0

Ich glaube nicht, dass es überhaupt möglich ist, die Konfiguration zur Laufzeit ohne Neustart zu wechseln. Wenn Sie Jons Ansatz also nicht anwenden können, sollten Sie versuchen, einen anderen Ansatz zu finden.

Wie auch immer, vielleicht ist es nur ich nicht genug Informationen über Ihr Szenario, aber diese Art von Gefühl fischig.

Sind Sie sicher, dass der Austausch der Konfigurationsdatei der beste Weg ist, um alle Anforderungen zu erfüllen, die Sie erfüllen müssen? Ich meine, das ist ziemlich ungewöhnlich. Wenn ich du wäre, würde ich versuchen, eine andere Herangehensweise zu finden.

5

Microsoft .NET app.config ist nicht für Ihr Szenario, sowie viele andere konzipiert. Oft stoße ich auf ein ähnliches Bedürfnis, daher habe ich viel Mühe darauf verwendet, eine Lösung zu entwickeln.

  1. Redesign app.config nur als Konfigurations Bootstrap zu verwenden: angeben, wo der Rest der realen Konfigurationsdaten zu finden. Diese Information sollte sich fast nie ändern, so dass keine Dateiüberwachung oder Neustarts von Anwendungen durchgeführt werden müssen.

  2. Wählen Sie einen alternativen Speicherort für die echten Konfigurationsdaten aus: eine Datei, eine Datenbank, vielleicht sogar einen Webdienst. Ich bevorzuge eine Datenbank die meiste Zeit, also erstelle ich eine Konfigurationstabelle mit einer einfachen Struktur, die es mir erlaubt, meine Daten zu speichern.

  3. Implementieren Sie eine einfache Bibliothek, um Ihren Konfigurationszugriff zu verpacken, so dass Sie eine einfache API für den Rest Ihrer Anwendung haben (über Dependency-Injektion). Verbergen Sie die Verwendung von app.config sowie Ihre realen Konfigurationsspeicherorte. Da .NET stark typisiert ist, nehmen Sie die Konfigurationseinstellungen so vor - konvertieren Sie jeden abgerufenen String in den am meisten spezifischen verfügbaren Typ (URL, Int32, FileInfo usw.).

  4. Legen Sie fest, welche Konfigurationseinstellungen zur Laufzeit im Vergleich zu denen, die nicht geändert werden können, sicher geändert werden können. In der Regel müssen einige Einstellungen mit anderen geändert werden, oder es macht einfach keinen Sinn, sie überhaupt ändern zu lassen. Wenn alle Konfigurationsdaten zur Laufzeit sicher geändert werden können, ist das einfach, aber ich bezweifle ein solches Szenario. Blenden Sie die Änderbarkeit und Abhängigkeiten der Konfigurationseinstellungen so weit wie möglich aus.

  5. Entwerfen Sie die Antwort auf die Nichtverfügbarkeit Ihrer echten Konfigurationsdaten. Ich bevorzuge es, das Fehlen jeglicher Konfigurationseinstellungen als einen schwerwiegenden Fehler zu behandeln, der die Anwendung abbricht, es sei denn, ich kann einen verwendbaren Standard identifizieren. Ebenso werde ich in Abwesenheit des Konfigurationsspeichercontainers (Datei, Datenbanktabelle usw.) abbrechen.

Genießen Sie und die besten Wünsche.

Verwandte Themen