Самый простой способ иметь файл конфигурации в приложении Windows Forms C # - PullRequest
83 голосов
/ 22 сентября 2008

Я действительно новичок в .NET и до сих пор не понял, как работают файлы конфигурации.

Каждый раз, когда я ищу в Google информацию об этом, я получаю результаты о web.config, но я пишу приложение для форм Windows.

Я понял, что мне нужно использовать пространство имен System.Configuration, но документация не помогает.

Как мне определить, что мой конфигурационный файл - XYZ.xml? Или у него есть имя по умолчанию для файла конфигурации? Я до сих пор этого не понял.

Кроме того, как мне определить новый раздел, действительно ли мне нужно создать класс, который наследуется от ConfigurationSection?

Я хотел бы просто иметь конфигурационный файл с некоторыми значениями, подобными этим:

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

Есть ли простой способ сделать это? Можете ли вы объяснить простым способом, как читать и записывать из / в простой файл конфигурации?

Ответы [ 11 ]

118 голосов
/ 22 сентября 2008

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

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

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

Как:

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

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

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

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

64 голосов
/ 22 сентября 2008

Разъяснение предыдущих ответов ...

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. Для создания этого файла разработчик не должен выполнять никаких дополнительных действий.

26 голосов
/ 23 сентября 2008

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

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

string s = Properties.Settings.Default.MyConnectionString;
9 голосов
/ 22 сентября 2008

Вам следует создать файл 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.»

7 голосов
/ 22 сентября 2008

Имя файла конфигурации по умолчанию - [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 голосов
/ 22 сентября 2008

Лучшая (ИМХО) статья о конфигурации приложения .NET находится на CodeProject Раскрытие тайн конфигурации .NET 2.0 . И моя следующая любимая (более короткая) статья о разделах в файлах конфигурации .net - Понимание обработчиков разделов - файл App.config .

3 голосов
/ 22 сентября 2008

В формах Windows у вас есть app.config, что очень похоже на web.config. Но так как то, что вам нужно, это пользовательские значения, я предлагаю использовать Настройки. Для этого откройте свойства вашего проекта, затем перейдите в настройки. Если файл настроек не существует, у вас будет ссылка для его создания. Затем вы можете добавить настройки в таблицу, которую вы видите там, что будет генерировать как соответствующий XML, так и класс Settings, который можно использовать для загрузки и сохранения настроек. Класс настроек будет назван примерно как 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 голосов
/ 01 марта 2009

Очень простой способ сделать это - использовать свой свой собственный Settings класс .

2 голосов
/ 22 сентября 2008

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

1 голос
/ 28 ноября 2008

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

AppSettings устарел и теперь считается устаревшим. [ ссылка ]

Кроме того, раздел appSettings файла app.config был заменен разделом applicationSettings.

Как уже упоминалось, вы должны использовать System.Configuration.ConfigurationManager. [ ссылка ], которая является новой для .Net 2.0

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...