Domanda

Sappiamo tutti che la modifica del file web.config di un'applicazione Web .NET riavvia l'app e la fa leggere la configurazione aggiornata. Come si fa con una console o un'app WinForms? Grazie :)

È stato utile?

Soluzione

Probabilmente è necessario un FileSystemWatcher per monitorare il file e gestire l'evento rilevante. La classe System.Configuration.ConfigManager potrebbe disporre dei metodi pertinenti per ricaricare (chiamata del metodo o alcuni di questi). Non ho VS di fronte a me, ma direi che sicuramente ci sono alcuni ganci lì.

Altri suggerimenti

Usa FileSystemWatcher per ricevere una notifica quando il tuo file di configurazione cambia.

Usa ConfigurationManager.RefreshSection per aggiornare dal disco senza riavviare l'app.

Esiste una buona sezione sull'effettiva ricarica dei dati qui . Combinalo con FileSystemWatcher come suggerito da DarkwingDuck, e potresti benissimo essere un vincitore.

Crea un FileSystemWatcher e ascolta le modifiche nel file di configurazione.
Quando attivato, utilizzare il seguente codice:

MyGeneratedSettingsFile.Default.Reload();

log4net ha la possibilità di rilevare modifiche esterne al file * .config. E come hanno già detto tutti gli altri, questo viene fatto utilizzando un FileSystemWatcher impostato per ascoltare le modifiche al file * .config.

Linea di fondo; FileSystemWatcher è la strada da percorrere.

Esiste tuttavia una più ampia implicazione nel ricaricare semplicemente il file di configurazione, ed è così che il resto dell'applicazione dovrebbe reagire a questo.

Ad esempio, è possibile configurare i livelli di contesto del database per SQL Server dopo aver letto dalla configurazione che si intende parlare con SQL Server e averne ottenuto la stringa di connessione.

Tuttavia, cosa succede se l'utente lo modifica in seguito e specifica invece un database Oracle? Non sarà sufficiente ricaricare semplicemente il file di configurazione, devi essere in grado di dire al resto dell'applicazione che anche qualcosa è cambiato.

Direi che dovresti sottrarre la parte di configurazione all'interno di una nuova classe, che ha eventi. Una volta deciso di ricaricare la configurazione, questa classe dovrebbe capire internamente quali impostazioni sono state modificate e attivare gli eventi appropriati.

Se si utilizza un contenitore IoC, potrebbe essere necessario ricollegare alcune delle sue dipendenze a causa delle nuove impostazioni.

In questo modo, parti della tua applicazione che si basano sulla configurazione e che, per qualsiasi motivo, potrebbero memorizzare nella cache le impostazioni di configurazione localmente per un determinato intervallo di tempo dovrebbero agganciarsi agli eventi rilevanti e rispondere al loro lancio.

Per quanto riguarda effettivamente il rilevamento e il ricaricamento del file di configurazione stesso, le altre risposte sembrano averlo trattato davvero bene, quindi non lo ripeterò qui.

Se si utilizza .NET Framework 2 e si utilizzano le impostazioni dell'ambito utente è piuttosto trasparente. Dopo aver modificato le impostazioni, chiama il metodo Save () e le nuove impostazioni sono immediatamente disponibili

Ad esempio

My.Settings.UpdateInterval = 10
My.Settings.Save()

Se l'impostazione è l'ambito dell'applicazione, FileSystemWatcher potrebbe essere la strada da percorrere

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top