Додайте значення до app.config і отримайте їх


75

Мені потрібно вставити пари значень ключа в app.Config наступним чином:

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

Коли я шукав у google, я отримав такий фрагмент коду

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. Як додати пари ключ-значення до програми. Налаштувати програмно та отримати їх?


6
Просто примітка для кожного, хто читає це, що config.Save (ConfigurationSaveMode.Modified) зберігає значення, лише якщо ключ заздалегідь визначений у файлі app.config. Для того, щоб насправді створити новий, вам потрібно просто використовувати config.Save () без параметрів.
ryanulit

Відповіді:


53

Вам не вистачає посилання на System.Configuration.dll? ConfigurationManagerклас лежить там.

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


2
Це мене іноді вражає! Я продовжую думати, що все, що мені потрібно, це використання :(
crashmstr

12

Це працює:

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

3
якщо ви хочете мати доступ до цього значення, ви щойно додали його в коді пізніше без перезапуску програми, вам потрібно зателефонувати ConfigurationManager.RefreshSection("appSettings");після цього.
розповсюджено

Ви можете використовувати Assembly.GetExecutingAssembly().Locationзамість того, Application.ExecutablePathякщо запускаєте його з консольної програми . Ви також можете поглянути на відповідь Сураджа .
AlexMelw

9

Спробуйте додати посилання на System.Configuration, ви отримуєте частину простору імен конфігурації, посилаючись на простір імен System, додаючи посилання на System.Configuration має дозволити вам отримати доступ ConfigurationManager.


5

Сподіваюся, це працює:

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

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

3

Щоб отримати дані з App.config

Маючи на увазі, ви повинні:

  1. Додано до посилань -> System.Configuration
  2. а також додав це за допомогою оператора -> using System.Configuration;

Просто зробіть це

string value1 = ConfigurationManager.AppSettings["Value1"];

Крім того, ви можете досягти цього в одному рядку, якщо не хочете using System.Configuration;явно додавати .

string value1 = System.Configuration.ConfigurationManager.AppSettings["Value1"]

0

вибачте за пізню відповідь, але, можливо, мій код може допомогти вам.

Я розмістив 3 кнопки на поверхні вікна. button1 & 2 встановить інше значення, а button3 отримає поточне значення. тому при запуску мого коду спочатку додайте посилання 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);
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.