Самый простой способ иметь файл конфигурации в приложении 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 и выше есть очень симпатичный способ под названием Настройки.
Thomas
1
@Seven, это была опечатка, но это могло означать: «Объясни на примере» :)
Фабио Гомес

Ответы:

121

Вы хотите использовать App.Config.

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

Затем вы добавляете ключи в раздел конфигурации / appsettings

Подобно:

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

Получите доступ к участникам, выполнив

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

Это работает в .NET 2 и выше.

qui
источник
2
На самом деле он работает во всех версиях .NET, начиная с версии 1.0. Новый класс в .NET 2.0 - ConfigurationManager.
Майк Диммик,
4
Я лично использую вкладку «Настройки» в «Свойствах приложения» (только для Framework 2.0 и более поздних версий), потому что Visual Studio будет генерировать строго типизированные свойства для ваших настроек. Они также могут включать «Пользовательские» настройки, которые читаются / записываются во время выполнения.
Адриан Кларк,
@ Майк, да, у меня было такое чувство, но я не был уверен. Я мало работал с 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. После сборки ваша выходная папка будет содержать файл с именем <assemblyname> .exe.config. Это будет копия файла App.Config . Для создания этого файла разработчик не должен выполнять никаких дополнительных действий.

ЗомбиОвца
источник
1
Мне это пригодилось. Два других момента: при добавлении нового файла в проект файл конфигурации приложения был найден, когда я щелкнул узел «Общие» в левой части диалогового окна. Чтобы использовать класс ConfigurationManager в моем коде, мне пришлось добавить DLL System.Configuration в мои ссылки.
Джон Гилмер
28

Быстро прочитав предыдущие ответы, они выглядят правильно, но не похоже, что кто-то упоминал о новых возможностях конфигурации в Visual Studio 2008. Он по-прежнему использует app.config (скопированный во время компиляции в YourAppName.exe.config) но есть виджет пользовательского интерфейса для установки свойств и определения их типов. Дважды щелкните Settings.settings в папке «Свойства» вашего проекта.

Самое приятное то, что доступ к этому свойству из кода является безопасным для типов - компилятор обнаружит очевидные ошибки, такие как неправильный ввод имени свойства. Например, к свойству MyConnectionString в app.config можно будет получить доступ, например:

string s = Properties.Settings.Default.MyConnectionString;
Максфурни
источник
Это было доступно в VS2005.
Greg D
5
Хорошо, но он (Свойства проекта | Настройки) генерирует код, который необходимо скомпилировать. Если вы хотите изменить настройку, вам необходимо выпустить новые двоичные файлы для клиента.
JohnL4
@ JohnL4, если эти настройки находятся в области «пользователя», вы можете изменить их программно, напримерSettings.Default.Test = "abc"; Settings.Default.Save();
Пит Бритс
10

Вам следует создать файл App.config (очень похожий на web.config ).

Вы должны щелкнуть правой кнопкой мыши свой проект, добавить новый элемент и выбрать новый «Файл конфигурации приложения» .

Убедитесь, что вы добавили using 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».

Натан Куп
источник
Очень полезно. Решил мою проблему с T.
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, Unraveling the Mysteries of .NET 2.0 Configuration . И моя следующая любимая (более короткая) статья о разделах в файлах конфигурации .NET - « Понимание обработчиков разделов - файл App.config» .

TcKs
источник
На самом деле это не самый простой способ, о котором спрашивает пользователь, но «Раскрытие тайн конфигураций .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).

Джейми Иде
источник
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 . Это файл конфигурации по умолчанию.

Джефф
источник