Frage

Gibt es eine Möglichkeit zur Laufzeit einer Anwendungen app.config (current.config new.config, Datei für Datei), um aus. Ich habe ein Backup / Restore-Prozess, der seine eigene application.exe.config Datei ersetzen muss. Ich habe diese Post aber nicht beantworten, wie dies zur Laufzeit tun.

War es hilfreich?

Lösung

Es stellte sich heraus, dass ich die .config-Datei für die neue tauschen können und machen einen ConfigurationManager.RefreshSection (...) für jeden Abschnitt. Es wird aus der neuen .config-Datei aktualisieren.

Andere Tipps

Microsoft .NET ist app.config ist für Ihr Szenario nicht darauf ausgelegt, sowie viele andere. Ich begegne oft ein ähnliches Bedürfnis, so dass ich sehr viel Mühe aufgewendet haben, um eine Lösung zu entwerfen.

  1. Redesign app.config nur als Konfigurations Bootstrap zu verwenden: angeben, wo der Rest der realen Konfigurationsdaten zu finden. Diese Informationen sollten so gut wie nie ändern, so gibt es keine Notwendigkeit Datei beobachten oder die Anwendung neu gestartet zu behandeln.

  2. Wählen Sie einen anderen Speicherort für die realen Konfigurationsdatum: eine Datei, eine Datenbank, vielleicht sogar einen Web-Service. Ich ziehe eine Datenbank die meiste Zeit, so dass ich erstellen Sie eine Konfigurationstabelle mit einer einfachen Struktur, die mir meine Daten gespeichert werden können.

  3. Implementieren Sie eine einfache Bibliothek Konfiguration Zugang zu wickeln, so dass Sie eine einfache API für den Rest Ihrer Anwendung (über Dependency Injection). Verstecken Sie die Verwendung von app.config sowie Ihre realen Konfiguration Ablageort (n). Da ist .NET so die Konfigurationseinstellungen stark typisiert, machen -. Jede Saite in den meisten spezifischen Typen verfügbar (. URL, Int32, Fileinfo, etc.) abgerufen konvertieren

  4. Sie fest, welche Konfigurationseinstellungen sicher zur Laufzeit im Vergleich zu denen geändert werden können, die nicht kann. Normalerweise müssen einige Einstellungen mit anderen ändern zusammen, oder es einfach keinen Sinn macht, damit sie überhaupt ändern. Wenn alle Konfigurationsdaten sicher zur Laufzeit ändern kann, dann macht die Dinge einfach, aber ich bezweifle stark, ein solches Szenario. Ausblenden der Veränderlichkeit und Abhängigkeiten der Konfigurationseinstellungen in dem Umfang möglich.

  5. Entwerfen Sie die Antwort auf die Nichtverfügbarkeit von Ihren wirklichen Konfigurationsdaten. Ich ziehe das Fehlen jeglicher Konfigurationseinstellung als fatalen Fehler zu behandeln, die die Anwendung abgebrochen wird, wenn ich nicht ein brauchbares Standard identifizieren kann. Ebenso abbrechen ich in Abwesenheit des Konfigurationsspeicherbehälters (Datei, Datenbank-Tabelle, usw.).

Genießen, und die besten Wünsche.

Sind Sie in der Lage, die Anwendung neu zu starten, wenn Sie feststellen, dass Sie Dateien wechseln müssen? Wenn ja, es ist nur eine Frage, die Dateien von Schalt- und neu zu starten. Nun kommt der schwierige Bit ist , wenn .NET hält die app.config-Datei zu öffnen, während das Programm läuft. Ich vermute, dass dies nicht der Fall, aber wenn der am offensichtlichsten Ansatz scheitert, empfehle ich Ihnen eine zweite Anwendung haben (cfgswitcher.exe), die mit einem PID für den Prozess wartet auf der Befehlszeile angegeben zu beenden, schaltet dann Config-Dateien und relauncht die Original-Prozess. Dann Ihre Anwendung würde einfach brauchen cfgswitcher.exe (vorbei in seinem eigenen PID als Befehlszeilenargument) zu starten und beenden.

Als ich aber sagen, es lohnt mich, den offensichtlichen Ansatz versucht zuerst.

EDIT: Wenn Sie die Anwendung nicht neu starten können (oder sogar einen Teil davon in einem neuen AppDomain) dann verschiedene Aspekte der app.config (Montag Bindungen usw.) kann nicht geändert werden. Wenn Sie nur daran interessiert sind in der eigene Konfigurationsabschnitte zu ändern, dann schlage ich vor, Sie speichern sie in einer separaten Konfigurationsdatei und laden Sie sie, wann immer Sie wollen.

Schauen Sie sich die Ereignisse auf der Application Klasse zur Verfügung. Es gibt Property & SettingChanging, die Sie können, was Sie brauchen.

Sie können auch die Datei beobachten und, wenn es die Reload-Methode aufrufen, erhalten die neuen Einstellungen geändert hat.

Ich glaube nicht, ist es möglich, überhaupt die Konfiguration zur Laufzeit zu wechseln, ohne neu zu starten, wenn Sie also nicht Jon Ansatz anwenden können, sollten Sie versuchen, mit einem anderen Ansatz zu entwickeln.

Wie auch immer, vielleicht ist es nur mich, die nicht genügend Informationen über Ihr Szenario, aber diese Art der fühlt sich faul.

Sind Sie sicher, , dass die Konfigurationsdatei tauschen die beste Art und Weise, was Voraussetzung Sie erfüllen müssen, zu erreichen ist? Ich meine, das ist eine ganz ungewöhnliche Sache. Wenn ich Sie wäre, würde ich versuchen, mit einem anderen Ansatz zu entwickeln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top