Найпростіший спосіб мати файл конфігурації у програмі Windows Forms C #


88

Я справді новачок у .NET, і досі не зрозумів, як працюють файли конфігурації.

Кожного разу, коли я шукаю в Google про це, я отримую результати про web.config, але я пишу програму Windows Forms.

Я зрозумів, що мені потрібно використовувати простір імен System.Configuration, але документація не допомагає.

Як визначити, що моїм файлом конфігурації є XYZ.xml? Або він має назву за замовчуванням для файлу конфігурації? Я все ще не зрозумів цього.

Крім того, як мені визначити новий розділ? Чи справді мені потрібно створити клас, який успадковує від ConfigurationSection?

Я хотів би просто мати файл конфігурації з такими значеннями, як це:

<MyCustomValue>1</MyCustomValue>
<MyCustomPath>C:\Some\Path\Here</MyCustomPath>

Чи є простий спосіб це зробити? Чи можете ви просто пояснити, як читати та писати з / у простий конфігураційний файл?


1
Яка ваша версія .NET? Для версій 2.0 і вище існує дуже милий спосіб, який називається Налаштування.
Томас

1
@Seven, це була друкарська помилка, але це могло означати "Поясни на прикладі" :)
Фабіо Гомес

Відповіді:


121

Ви хочете використовувати App.Config.

Коли ви додаєте новий елемент до проекту, є щось, що називається файлом конфігурації програм. Додайте це.

Потім ви додаєте ключі в розділі конфігурації / налаштування програм

Люблю:

<configuration>
 <appSettings>
  <add key="MyKey" value="false"/>

Доступ до учасників, виконуючи

System.Configuration.ConfigurationSettings.AppSettings["MyKey"];

Це працює в .NET 2 і вище.


2
Насправді це працює у всіх версіях .NET, починаючи з версії 1.0 і далі. Новим класом у .NET 2.0 є ConfigurationManager.
Mike Dimmick

4
Я особисто використовую вкладку "Налаштування" в "Властивості програми" (лише Framework 2.0 і далі), оскільки Visual Studio буде кодувати властивості, що сильно вводяться для ваших налаштувань. Вони також можуть включати налаштування "Користувач", які читаються / записуються під час виконання.
Адріан Кларк,

@Mike так, у мене було відчуття, що це так, але я не був надто впевнений. Я багато не працював з 1.
qui

26
Зверніть увагу, що ConfigurationSettingsзастаріле, використовуйте System.Configuration.ConfigurationManager.AppSettings["MyKey"];.
JNF

16
Також примітка, щоб використовувати System.Configuration.ConfigurationManagerваш проект, потрібно посилання наSystem.Configuration.dll
dmeglio

66

Уточнення попередніх відповідей ...

  1. Додайте новий файл до свого проекту ( ДодатиНовий елементФайл конфігурації програми )

  2. Новий файл конфігурації з'явиться у Провіднику рішень як App.Config .

  3. Додайте свої налаштування до цього файлу, використовуючи наступне як шаблон

    <configuration>
      <appSettings>
        <add key="setting1" value="key"/>
      </appSettings>
      <connectionStrings>
        <add name="prod" connectionString="YourConnectionString"/>
      </connectionStrings>
    </configuration>
    
  4. Отримайте їх так:

    private void Form1_Load(object sender, EventArgs e)
    {
        string setting = ConfigurationManager.AppSettings["setting1"];
        string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString;
    }
    
  5. Після створення вихідна папка буде містити файл із назвою <ім'я збірки> .exe.config. Це буде копія файлу App.Config . Для створення цього файлу розробник не повинен виконувати жодної подальшої роботи.


1
Це мені було корисно. Ще два моменти: При додаванні нового файлу до проекту, файл конфігурації програми був знайдений, коли я натиснув на загальний вузол ліворуч у діалоговому вікні. Для того, щоб використовувати клас ConfigurationManager у своєму коді, мені довелося додати DLL System.Configuration до своїх посилань.
Джон Гілмер,

28

Швидко прочитавши попередні відповіді, вони виглядають правильно, але схоже, що ніхто не згадав про нові засоби конфігурації у Visual Studio 2008. Він все ще використовує app.config (скопійований під час компіляції до YourAppName.exe.config), але є віджет UI для встановлення властивостей та вказівки їх типів. Двічі клацніть Settings.settings у папці "Властивості" вашого проекту.

Найкраще те, що доступ до цієї властивості з коду є безпечним для типу - компілятор виявить очевидні помилки, такі як помилкове введення імені властивості. Наприклад, властивість під назвою MyConnectionString у app.config буде доступна так:

string s = Properties.Settings.Default.MyConnectionString;

Це було доступно у VS2005.
Greg D

5
Приємно, але він (Властивості проекту | Налаштування) генерує код, який потрібно скомпілювати. Якщо ви хочете змінити налаштування, вам потрібно випустити нові двійкові файли для клієнта.
JohnL4

@ JohnL4, якщо ці налаштування знаходяться в області "користувач", ви можете змінити їх програмно, наприкладSettings.Default.Test = "abc"; Settings.Default.Save();
Peet Brits

10

Вам слід створити файл App.config (дуже схожий на web.config ).

Ви повинні клацнути правою кнопкою миші на своєму проекті, додати новий елемент та вибрати новий "Файл конфігурації програми" .

Переконайтеся, що ви додали за допомогою System.Configuration у своєму проекті.

Тоді ви можете додати до нього значення:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="setting1" value="key"/>
  </appSettings>
  <connectionStrings>
    <add name="prod" connectionString="YourConnectionString"/>
  </connectionStrings>
</configuration>

    private void Form1_Load(object sender, EventArgs e)
    {
        string setting = ConfigurationManager.AppSettings["setting1"];
        string conn = ConfigurationManager.ConnectionStrings["prod"].ConnectionString;
    }

Просто примітка: За словами Microsoft , вам слід використовувати ConfigurationManager замість ConfigurationSettings (див. Розділ зауважень):

"Клас ConfigurationSettings забезпечує лише зворотну сумісність. Для нових програм замість цього слід використовувати клас ConfigurationManager або WebConfigurationManager."


Дуже корисний. Вирішив моє питання Т.
JCMorris

У Visual Studio 2015: натисніть Проект> Додати посилання. Прокрутіть наполовину, щоб знайти System.Configuration Клацніть OK, а потім оновіть рядок коду відповідно до коментаря Натана.
Robot70,

7

За замовчуванням ім'я файлу конфігурації - [yourexe] .exe.config. Отже notepad.exe матиме файл конфігурації з назвою notepad.exe.config, в тій же папці, що і програма. Це загальний файл конфігурації для всіх аспектів CLR та Framework, але він може містити ваші власні налаштування під <appSettings>вузлом.

<appSettings>Елемент створює набір пар ім'я-значення , які можуть бути доступні , як System.Configuration.ConfigurationSettings.AppSettings. Однак немає можливості зберегти зміни у файлі конфігурації.

Також можна додати власні власні елементи до файлу конфігурації - наприклад, визначити структурований параметр - шляхом створення класу, який реалізує, IConfigurationSectionHandlerта додавання його до <configSections>елемента конфігураційного файлу. Потім ви можете отримати до нього доступ, зателефонувавши ConfigurationSettings.GetConfig.

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

Visual Studio створює файл із назвою App.config, який копіює у папку EXE з правильним ім'ям під час створення проекту.


6

Найкраща (IMHO) стаття про конфігурацію програми .NET - про CodeProject, розкриваючи таємниці конфігурації .NET 2.0 . І моєю наступною улюбленою (коротшою) статтею про розділи у файлах конфігурації .NET є Розуміння обробників розділів - файл App.config .


Це дійсно не найпростіший спосіб, який запитує користувач, але розгадування таємниць конфігурацій .NET 2.0 - це справді чудова серія статей.
Рікардо Аморес

3

У Windows Forms у вас є app.configфайл, який дуже схожий на web.configфайл. Але оскільки, на мою думку, це вам потрібно, це власні значення, я пропоную скористатися налаштуваннями .

Для цього відкрийте властивості проекту, а потім перейдіть до налаштувань. Якщо файл налаштувань не існує, у вас буде посилання для його створення. Потім ви можете додати налаштування до таблиці, яку ви бачите там, яка створить як відповідний XML, так і клас Налаштування, який можна використовувати для завантаження та збереження параметрів.

Клас налаштувань буде називатися приблизно так DefaultNamespace.Properties.Settings. Тоді ви можете використовувати код, подібний до:

using DefaultNamespace.Properties;

namespace DefaultNamespace {
    class Class {
        public int LoadMySettingValue() {
            return Settings.Default.MySettingValue;
        }
        public void SaveMySettingValue(int value) {
            Settings.Default.MySettingValue = value;
        }
    }
}

2

Я погоджуюсь з іншими відповідями, які вказують вам на app.config. Однак замість зчитування значень безпосередньо з app.config, вам слід створити клас утиліти (AppSettings - це ім'я, яке я використовую), щоб читати їх і виставляти як властивості. Клас AppSettings можна використовувати для агрегування параметрів з декількох сховищ, таких як значення з app.config та інформація про версію програми зі збірки (AssemblyVersion та AssemblyFileVersion).


2

Дуже простий спосіб зробити це - використовувати власний власний Settingsклас .


+1 для менш детального посилання на ApplicationSettings за адресою msdn.microsoft.com/en-us/library/…, що здається простішим, ніж реалізації ConfigurationManager. Отримати / встановити налаштування, не дбайте про "Формування XML".
maxwellb

1

Використання:

System.Configuration.ConfigurationSettings.AppSettings["MyKey"];

AppSettings застаріло і зараз вважається застарілим ( посилання ).

Крім того, розділ appSettings в app.config замінено на applicationSettings розділом .

Як хтось інший згадував, ви повинні використовувати System.Configuration.ConfigurationManager ( посилання ), що є новим для .NET 2.0.


ConfigurationSettings застаріла, а не AppSettings.
Тобі

0

Яку версію .NET та Visual Studio ви використовуєте?

Коли ви створювали новий проект, у вашому рішенні повинен бути файл, який називається app.config . Це файл конфігурації за замовчуванням.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.