2011-01-21 18 views
36

chiunque può aiutarmi come è possibile impostare/memorizzare valori nel file app.config utilizzando C#, è possibile a tutti?Scrivi valori nel file app.config

+11

Hai fatto questo a Google? –

+1

Potresti essere un po 'più specifico? Che tipo di valore è che non vuoi memorizzare, e quando? Generalmente non è consigliabile memorizzare i valori a livello di applicazione (come stringhe o int) nella config dell'app. – Mantisen

+3

Chiedere una domanda che sembra stupida da parte dei professionisti va bene, tutti iniziano con l'inizio. Tuttavia, nemmeno una ricerca su google simplesso è semplicemente zoppa. –

risposta

6

Se si utilizza App.Config per memorizzare i valori nella sezione <app Key="" Value="" /> o CustomSections, utilizzare la classe ConfigurationManager, altrimenti utilizzare la classe XMLDocument.

Si potrebbe utilizzare il codice pubblicato sul CodeProject

2

Sì, è possibile - vedi ConfigurationManager

ConfigurationManager classe include membri che consentono di eseguire le seguenti operazioni:

  • leggere e scrivere file di configurazione nel suo complesso.

imparare ad usare il docs, che dovrebbe essere il primo porto di scalo per-una domanda come questa.

32

Provate il seguente codice:

Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); 
    config.AppSettings.Settings.Add("YourKey", "YourValue"); 
    config.Save(ConfigurationSaveMode.Minimal); 

Ha funzionato per me :-)

+0

Grazie, lo spazio dei nomi è System.Configuration. Quindi System.Configuration.Configuration config = .... – Rob

+0

"L'accesso al percorso è stato negato" quando ho provato a installarlo. Ma quando lo provo in Visual Studio funziona perfettamente. Mi potete aiutare. – Reynan

16

Sulla Framework 4.5 la "chiave" AppSettings.Settings [ ] parte di ConfigurationManager è di sola lettura, quindi ho dovuto prima rimuovere la chiave, quindi aggiungerla di nuovo usando:

Configuration config = ConfigurationManager.OpenExeConfiguration(Application.ExecutablePath); 

config.AppSettings.Settings.Remove("MySetting"); 
config.AppSettings.Settings.Add("MySetting", "some value"); 

config.Save(ConfigurationSaveMode.Modified); 

Non preoccuparti, non otterrai un'eccezione se provi a rimuovere una chiave che non esiste.

Questo post dà qualche buon consiglio

10
private static string GetSetting(string key) 
    { 
     return ConfigurationManager.AppSettings[key]; 
    } 

    private static void SetSetting(string key, string value) 
    { 
     Configuration configuration = 
      ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 
     configuration.AppSettings.Settings[key].Value = value; 
     configuration.Save(ConfigurationSaveMode.Full, true); 
     ConfigurationManager.RefreshSection("appSettings"); 
    } 
+0

Ho dovuto aggiungere configuration.AppSettings.Settings.Add (valore); prima della configurazione.AppSettings.Settings [chiave] .Valore = valore; per farlo funzionare quando il file .config era vuoto. –

+0

Quando si utilizza 'Settings.Add()', se la voce non esiste, verrà aggiunta, se già esiste, il valore verrà aggiunto ai valori esistenti separati da una virgola. Per esempio. dopo aver chiamato 'Settings.Add (" myKey "," test ")' 4 volte, la tua voce diventerà: '' – Stacked

+0

ConfigurationManager.RefreshSection ("appSettings "); è stata la chiave per me, se non lo fai, leggere valori scritti di recente non funzionerà. –

0
 string filePath = System.IO.Path.GetFullPath("settings.app.config"); 

     var map = new ExeConfigurationFileMap { ExeConfigFilename = filePath }; 
     try 
     { 
      // Open App.Config of executable 
      Configuration config = ConfigurationManager.OpenMappedExeConfiguration(map, ConfigurationUserLevel.None); 

      // Add an Application Setting if not exist 

       config.AppSettings.Settings.Add("key1", "value1"); 
       config.AppSettings.Settings.Add("key2", "value2"); 

      // Save the changes in App.config file. 
      config.Save(ConfigurationSaveMode.Modified); 

      // Force a reload of a changed section. 
      ConfigurationManager.RefreshSection("appSettings"); 
     } 
     catch (ConfigurationErrorsException ex) 
     { 
      if (ex.BareMessage == "Root element is missing.") 
      { 
       File.Delete(filePath); 
       return; 
      } 
      MessageBox.Show(ex.Message); 
     } 
2

Per un'applicazione console .NET 4.0, nessuno di questi ha lavorato per me. Così ho usato il seguente qui sotto e ha funzionato:

private static void UpdateSetting(string key, string value) 
{ 
    Configuration configuration = ConfigurationManager. 
     OpenExeConfiguration(Assembly.GetExecutingAssembly().Location); 
    configuration.AppSettings.Settings[key].Value = value; 
    configuration.Save(); 

    ConfigurationManager.RefreshSection("appSettings"); 
} 
2

provare quanto segue:

Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);    
config.AppSettings.Settings[key].Value = value; 
config.Save(); 
ConfigurationManager.RefreshSection("appSettings"); 
4

Come altri hanno detto, è possibile farlo con ConfigurationManager.AppSettings.Settings. Ma: Utilizzare Settings[key] = value non funzionerà se la chiave non esiste.
Utilizzando Settings.Add(key, value), se la chiave esiste già, si unirà il nuovo valore al suo valore (s) separati da una virgola, qualcosa come <add key="myKey" value="value1, value2, value3" />

Per evitare questi risultati inattesi, si deve gestire due scenari di

  • Se la voce con la chiave specificata esiste? quindi aggiornare il suo valore
  • se la voce con la chiave data non esiste?quindi creare nuova voce (chiave, valore)

Codice

public static void Set(string key, string value) 
{ 
    var config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None); 

    var entry = config.AppSettings.Settings[key]; 
    if (entry == null) 
     config.AppSettings.Settings.Add(key, value); 
    else 
     config.AppSettings.Settings[key].Value = value; 

    config.Save(ConfigurationSaveMode.Modified); 
} 

Per ulteriori informazioni circa il check entry == null, controllare this post.
Spero che questo aiuti qualcuno.