2009-02-26 4 views

Antwort

28

Yes, you do:

NET Framework wird die app.config einmal gelesen, und nie wieder die app.config berühren. Aus diesem Grund müssen Sie die Anwendung neu starten, um die Änderung zu übernehmen.

Warum erkennt .Net Framework nicht, dass app.config geändert wurde, und alle Konfigurationsdaten aktualisieren?

Der Grund ist einfach, dies ist im Allgemeinen nicht möglich.

Lassen Sie uns den Einsatz Raymonds hier „imagine dies geschehen könnte“ Logik ...

4

Ja.

Vermutlich meinst du die Datei appname.exe.config?

8

Nein, haben Sie nicht haben zu. Wenn Sie Änderungen in app.config wirksam werden möchten, müssen Sie sie möglicherweise neu starten. Oder Sie möchten einen benutzerdefinierten Konfigurationsdatei-Überwachungsmechanismus implementieren, der die Einstellungen der Dienste im laufenden Betrieb ändert.

+7

"Wenn Sie möchten, dass Änderungen in app.config wirksam werden" - ich denke, das ist implizit die Frage! –

+0

Großartig, nur wenn ich keine Gummihühner mehr habe. –

+0

@Gamecat: freie Reichweite? –

1

Dies geht weit aus dem Rahmen der Frage, aber ich würde vermuten, dass Sie nur in einigen "anwendungsspezifischen" Abschnitt (appSettings, etc.) Änderungen vornehmen möchten.

Sie sind besser dran, Ihren eigenen Config-Abschnitt-Handler zu schreiben, der seine eigene Konfigurationsdatei überwacht - den Ansatz nlog uses. Überprüfen Sie den Abschnitt "Automatische Rekonfiguration".

2

Normalerweise ja. Sie könnten jedoch einen Windows-Dienst schreiben, der einen Dateimonitor in die Konfigurationsdatei einfügt und eine Änderung erkennt und sie ohne Neustart anwenden würde.

Zum Beispiel bietet das Log4Net Logging Framework einen solchen Mechanismus für seine Konfigurationsdatei.

7

Ich habe das schon einmal benutzt. Im Wesentlichen wird der angegebene Abschnitt neu geladen, bevor der Wert abgerufen wird. Möglicherweise weniger effizient als ein Config-File-Watcher, der bei Bedarf aktualisiert wird, aber sicher effektiv verwendet wird.

ConfigurationManager.RefreshSection("appSettings") 
    sValue = ConfigurationManager.AppSettings(name) 
+0

Das ist ein großartiger Fund! – d219

Verwandte Themen