2009-05-29 6 views
55

мне нужно вставить пары ключ-значение в App.config следующим образом:Добавить значения в app.config и извлекать их

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

Когда я искал в гугле я получил следующий фрагмент кода

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); 

Вышеприведенный код не работает, поскольку ConfigurationManager не найден в пространстве имен System.Configuration. Я использую .NET 2.0. Как добавить пары ключ-значение в app.Config программно и получить их?

+4

Только примечание для тех, кто читает это, что config.Save (ConfigurationSaveMode.Modified) только сохраняет значение, если ключ предопределены в файле app.config. Чтобы создать новый, вам нужно просто использовать config.Save() без параметров. – ryanulit

ответ

44

Вам не хватает ссылки на System.Configuration.dll? ConfigurationManager класс лежит там.

EDIT: пространство имен System.Configuration имеет классы в файлах mscorlib.dll, system.dll и в файле system.configuration.dll. Ваш проект всегда включает ссылки mscorlib.dll и system.dll, но файл system.configuration.dll должен быть добавлен к большинству типов проектов, так как его нет по умолчанию ...

+2

Это иногда меня! Я продолжаю думать, что все, что мне нужно, это использовать :( – crashmstr

8

Попробуйте добавить ссылку на System.Configuration, вы получите некоторые из пространства имен конфигурации, ссылаясь на пространство имен System, добавив ссылку на System.Configuration, вы должны получить доступ к ConfigurationManager.

8

Это работает.

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

, если вы хотите иметь доступ к этому значению, которое вы просто добавили в код позже, без перезапуска приложения, вам нужно вызвать 'ConfigurationManager.RefreshSection (« appSettings »);' after это. – propagated

4

Я надеюсь, что это работает:

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

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

извините за поздний ответ, но может быть мой код может помочь и.

Я разместил 3 кнопки на поверхности winform. button1 & 2 установит различное значение, а кнопка 3 будет извлекать текущее значение. поэтому при запуске моего кода сначала добавьте ссылку System.configuration

и нажмите на первую кнопку, а затем нажмите кнопку 3, чтобы узнать, какое значение было установлено. В следующий раз снова нажмите на вторую & Третью кнопку, чтобы увидеть, какое значение было установлено после изменения.

так вот код.

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); 
     }