2009-05-29 14 views
55

ho bisogno di inserire coppie di valori chiave app.config come segue:Aggiungere valori da app.config e recuperarli

<configuration> 
<appSettings> 
    <add key="Setting1" value="Value1" /> 
    <add key="Setting2" value="Value2" /> 
</appSettings> 
</configuration> 

Quando ho cercato in google ho ottenuto il seguente frammento di codice

System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); // Add an Application Setting. 

config.AppSettings.Settings.Add("ModificationDate", 
       DateTime.Now.ToLongTimeString() + " "); 

// Save the changes in App.config file. 

config.Save(ConfigurationSaveMode.Modified); 

Il codice sopra riportato non funziona poiché ConfigurationManager non è stato trovato nello spazio dei nomi System.Configuration Sto usando .NET 2.0. Come aggiungere coppie chiave-valore a app.Config in modo programmatico e recuperarle?

+4

Solo una nota per qualcuno leggendo questo che config.Save (ConfigurationSaveMode.Modified) salva solo il valore se la chiave è predefinita nel file app.config. Per crearne uno nuovo, è sufficiente utilizzare semplicemente config.Save() senza parametri. – ryanulit

risposta

44

Ti manca il riferimento a System.Configuration.dll? La classe ConfigurationManager si trova lì.

MODIFICA: lo spazio dei nomi System.Configuration ha classi in mscorlib.dll, system.dll e in system.configuration.dll. Il tuo progetto include sempre i riferimenti mscorlib.dll e system.dll, ma system.configuration.dll deve essere aggiunto alla maggior parte dei tipi di progetto, poiché non è lì per impostazione predefinita ...

+2

A volte mi capita! Continuo a pensare che tutto ciò di cui ho bisogno è usare :( – crashmstr

8

Prova ad aggiungere un riferimento a System.Configuration, ottieni parte dello spazio dei nomi di configurazione facendo riferimento allo spazio dei nomi di sistema, aggiungendo il riferimento a System.Configuration dovrebbe consentire l'accesso a ConfigurationManager.

8

Questo funziona.

public static void AddValue(string key, string value) 
    { 
     Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); 
     config.AppSettings.Settings.Add(key, value); 
     config.Save(ConfigurationSaveMode.Minimal); 
    } 
+0

se vuoi essere in grado di accedere a questo valore che hai aggiunto nel codice in seguito senza riavviare l'applicazione devi chiamare 'ConfigurationManager.RefreshSection (" appSettings ");' dopo Questo. – propagated

4

Spero che questo funziona:

System.Configuration.Configuration config= ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 

config.AppSettings.Settings["Yourkey"].Value = "YourValue"; 
config.Save(ConfigurationSaveMode.Modified); 
0

dispiace per la risposta in ritardo, ma può essere il mio codice può aiutare u.

ho posizionato 3 pulsanti sulla superficie winform. button1 & 2 imposterà un valore diverso e il pulsante3 recupererà il valore corrente. quindi, quando esegui il mio codice aggiungi prima il riferimento System.configuration

e fai clic sul primo pulsante e poi sul terzo pulsante per vedere quale valore è stato impostato. la prossima volta clicca di nuovo sul secondo pulsante & per vedere di nuovo quale valore è stato impostato dopo la modifica.

quindi ecco il codice.

using System.Configuration; 

private void button1_Click(object sender, EventArgs e) 
     { 
      Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); 
      config.AppSettings.Settings.Remove("DBServerName"); 
      config.AppSettings.Settings.Add("DBServerName", "FirstAddedValue1"); 
      config.Save(ConfigurationSaveMode.Modified); 
     } 

     private void button2_Click(object sender, EventArgs e) 
     { 
      Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); 
      config.AppSettings.Settings.Remove("DBServerName"); 
      config.AppSettings.Settings.Add("DBServerName", "SecondAddedValue1"); 
      config.Save(ConfigurationSaveMode.Modified); 
     } 

     private void button3_Click(object sender, EventArgs e) 
     { 
      Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); 
      MessageBox.Show(config.AppSettings.Settings["DBServerName"].Value); 
     } 
Problemi correlati