2009-08-31 23 views
17

Desidero modificare un valore nella sezione appSetting in app.config. Così ho scritto,Modificare dinamicamente il valore nel file app.config

Console.WriteLine(ConfigurationManager.AppSettings["name"]); 
Console.Read(); 
Configuration config=ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
config.AppSettings.Settings["name"].Value = "raja";  
config.Save(ConfigurationSaveMode.Modified); 
ConfigurationManager.RefreshSection("appSettings"); 
Console.WriteLine(ConfigurationManager.AppSettings["name"]); 
Console.Read(); 

dopo l'esecuzione di codice di cui sopra, ho verificato l'app.config se il valore di elemento "nome" è stato cambiato o meno. ma nessun cambiamento.

cosa c'è di sbagliato nel mio codice? o c'è un altro modo per farlo?

+2

Cambia solo a livello di in-memory. non sta aggiornando il livello fisico (a livello di file) – Partha

+3

Non dovresti farlo. Le impostazioni del livello di applicazione non devono essere modificate (ecco perché non c'è alcun supporto per questo), ma è preferibile utilizzare le impostazioni a livello di utente. –

+0

Controlla questo link. Dovrebbe risolvere il tuo problema. http://stackoverflow.com/questions/11149556/c-sharp-app-config-change-value – Indira

risposta

1

Funziona, basta guardare la cartella bin/Debug, probabilmente stai guardando il file app.config all'interno del progetto.

+1

sì ma come posso controllare lì? nel mio caso gli stessi valori ci sono come prima dell'aggiornamento? –

5

è necessario aggiornare manualmente il file app.config

// Load the app.config file 
XmlDocument xml = new XmlDocument(); 
xml.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); 

// Do whatever you need, like modifying the appSettings section 

// Save the new setting 
xml.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile); 

e poi dire la vostra applicazione per ricaricare qualsiasi sezione è stato modificato

ConfigurationManager.RefreshSection("appSettings"); 
+2

Prestare attenzione a qualsiasi problema di sicurezza relativo all'aggiornamento di un file che molto probabilmente si troverà in Programmi. Sotto Vista, hai bisogno di autorizzazioni elevate per scrivere su un file in Programmi. –

41

Questo codice funziona per me:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
    config.AppSettings.Settings["test"].Value = "blah";  
    config.Save(ConfigurationSaveMode.Modified); 
    ConfigurationManager.RefreshSection("appSettings"); 

Nota: non aggiorna l'elemento della soluzione 'app.config', ma quello '.exe.config' nel bin/f più vecchio se lo si esegue con F5.

+0

Questo ha aiutato, grazie per la risposta. – fuzz

+0

Amico, è fantastico, T.Hanks! –

+0

Questo non funziona. Non mostra ancora che le impostazioni sono state modificate fino al prossimo avvio dell'app. Non sono sicuro di cosa sta succedendo. –

0

Prova:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
config.AppSettings.Settings.Remove("configFilePath"); 
config.AppSettings.Settings.Add("configFilePath", configFilePath); 
config.Save(ConfigurationSaveMode.Modified,true); 
config.SaveAs(@"C:\Users\USERNAME\Documents\Visual Studio 2010\Projects\ADI2v1.4\ADI2CE2\App.config",ConfigurationSaveMode.Modified, true); 
4

Ampliando l'esempio di Adis H per includere il caso null (ottenuto po 'su questo)

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
      if (config.AppSettings.Settings["HostName"] != null) 
       config.AppSettings.Settings["HostName"].Value = hostName; 
      else     
       config.AppSettings.Settings.Add("HostName", hostName);     
      config.Save(ConfigurationSaveMode.Modified); 
      ConfigurationManager.RefreshSection("appSettings"); 
Problemi correlati