2012-07-13 13 views
10

Ho un'applicazione console con il proprio App.config.Perché le mie modifiche di AppSettings in App.config non vengono prese in considerazione in fase di esecuzione? (Applicazione console)

ho bisogno di cambiare alcuni valori in tempo sezione per volta.

Il mio problema è che quando eseguo l'exe nella cartella bin/debug ottiene correttamente le appsettings rilevanti. Ma quando modifico e cambio i valori di alcune coppie chiave/valore e RE-RUN l'exe, legge ancora i valori originali.

(da re-RUN voglio dire che esegue l'applicazione sul comando promt chiamando MyTool.exe)

Ho provato a chiamare

ConfigurationManager.RefreshSection("appSettings"); 

nell'inizio del mio metodo principale. Ma non ha aiutato.

Potete per favore avvisare? Grazie

+0

si fa a modificare l'app.config all'interno del IDE o si fa a modificare direttamente l'exe.config nella cartella/DEBUG BIN? – Steve

+0

Nella cartella di debug. Non nell'IDE. – pencilCake

+0

E qual è il valore sulla proprietà Copia nella directory di output della tua app.config all'interno dell'IDE? – Steve

risposta

29

Ma quando ho modificare e cambiare i valori di alcune coppie chiave/valore e rieseguire l'exe, legge ancora i valori originali.

Dipende da come si sta eseguendo RUNNING in questo exe. Se si sta facendo questo in Visual Studio, colpendo F5, VS semplicemente copia il file app.config nel progetto per la produzione e lo rinomina a AppName.exe.config. Quindi, se si desidera che le modifiche vengano prese in considerazione, è necessario modificare AppName.exe.config (non App.config) e quindi eseguire l'eseguibile da Esplora risorse.

Detto questo, App.config viene letto e processati una volta sola. Quando inizia l'applicazione. I valori vengono quindi memorizzati nella cache per evitare costose analisi XML ogni volta che l'applicazione richiede un valore.

App.config è progettato per memorizzare i valori di configurazione che non dovrebbero essere cambiati. Se è necessario modificare dinamicamente i valori di configurazione, è necessario utilizzare un altro meccanismo di archiviazione: file, database, ...

Ma il metodo ConfigurationManager.RefreshSection("appSettings"); dovrebbe funzionare. Dopo aver modificato il file AppName.exe.config, si richiama questo metodo e quindi si richiama il valore necessario utilizzando ConfigurationManager.AppSettings["someKey"]; che dovrebbe restituire il nuovo valore.

+0

Accetto. Ma cosa succederebbe se riuscissi a realizzare ciò che chiedevo. È possibile? (+1 per le migliori pratiche consigliate) – pencilCake

+0

Per RE-RUN intendo l'esecuzione dell'applicazione sul comando promt chiamando MyTool.exe – pencilCake

+0

Chi modificherà questo file mentre l'applicazione è in esecuzione? L'applicazione stessa o qualche altro processo esterno? –

0
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
// change ConnectionString in App.Config for Entity FrameWork Object.... 
//..... 
config.Save(); 

si salva il file di configurazione?

Problemi correlati