Ist das Umschalten von app.config zur Laufzeit möglich?

8

Gibt es zur Laufzeit eine Möglichkeit, 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 post aber es beantwortet nicht, wie man das zur Laufzeit macht.

    
maxfridbe 12.01.2009, 19:35
quelle

5 Antworten

10

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

    
maxfridbe 12.01.2009, 21:06
quelle
5

Microsoft .NET app.config ist nicht für Ihr Szenario sowie für viele andere gedacht. Ich bin oft auf ein ähnliches Bedürfnis gestoßen, daher habe ich viel Mühe darauf verwendet, eine Lösung zu entwickeln.

  1. Redesign, um app.config nur als Konfigurations-Bootstrap zu verwenden: Geben Sie an, wo der Rest der echten Konfigurationsdaten zu finden ist. 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 (durch Dependency-Injektion). Verstecken Sie die Verwendung von app.config sowie Ihre realen Konfigurationsspeicherorte. Da .NET stark typisiert ist, nehmen Sie die Konfigurationseinstellungen so vor - konvertieren Sie jede gefundene Zeichenkette in den am meisten spezifischen verfügbaren Typ (URL, Int32, FileInfo, etc.).

  4. Ermitteln Sie, 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. Verstecken Sie die Änderbarkeit und Abhängigkeiten der Konfigurationseinstellungen so weit wie möglich.

  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.

    
Rob Williams 12.01.2009 23:56
quelle
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. Nun ist das heikle Bit , wenn .NET die Datei app.config während der Ausführung des Programms geöffnet hält. 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 einfach cfgswitcher.exe starten (indem sie eine eigene PID als Kommandozeilenargument übergibt) und beenden.

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

BEARBEITEN: Wenn Sie die Anwendung (oder sogar einen Teil davon in einer neuen Anwendungsdomäne) nicht neu starten können, können verschiedene Aspekte von app.config (Baugruppenbindungen usw.) nicht geändert werden. Wenn Sie nur daran interessiert sind, Ihre eigenen Konfigurationsabschnitte zu ändern, dann empfehle ich Ihnen, sie in einer separaten Konfigurationsdatei zu speichern und sie wann immer Sie möchten neu zu laden.

    
Jon Skeet 12.01.2009 19:40
quelle
0

Sehen Sie sich die Ereignisse an, die Ihnen in der ApplicationSettingsBase-Klasse zur Verfügung stehen. Es gibt PropertyChanged & amp; SettingChanging, das Ihnen das gibt, 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.

    
Darryl Braaten 12.01.2009 19:55
quelle
0

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

Wie auch immer, vielleicht ist es nur, dass ich nicht genug Informationen über Ihr Szenario habe, aber es fühlt sich irgendwie fischig an.

Sind Sie sicher, dass das Auslagern 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.

    
Tamas Czinege 12.01.2009 19:55
quelle

Tags und Links