Когда использовать .NET Settings против config <appsettings>? - PullRequest
24 голосов
/ 04 июня 2010

Есть ли какие-либо рекомендации относительно того, когда использовать Настройки приложения (не для пользовательских настроек) и файл .config ?

Обновление
Нужно понимать некоторые тонкие и важные различия, потому что они оба являются эффективными хранилищами ключей / значений. Например, я знаю, что изменение настроек приложения в web.config приведет к перезапуску веб-приложения.

Настройки были в .NET уже некоторое время, и я не потрудился посмотреть на них - возможно, один из них несколько избыточен, или использование обоих одновременно не имеет смысла ... вот такая деталь Я ищу понять и причины.

Ответы [ 8 ]

16 голосов
/ 25 апреля 2012

Вопрос немного староват, но я наткнулся на него и подумал добавить немного ясности на случай, если кто-то еще наткнется на него ...

Параметр настроек (в отличие от необработанного раздела) имеет сильную поддержку в рамках:

  1. Параметры строго типизированы (например, bool, int, ConnectionString и т. Д.), А не все возвращаются в виде строки для анализа вашим кодом, если это необходимо.

  2. Параметры могут быть определены как a) Внутренние или Общедоступные, и b) Для каждого пользователя или для каждого приложения (последнее по существу означает «для каждой машины»).

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

  4. Развернутый файл app.config (или web.config) хранит только значения по умолчанию (способ обработки изменений во время выполнения см. Ниже), что означает, что изменение настроек и сохранение их во время выполнения не измените файл .config и, соответственно, не вызовите перезапуск приложения.

  5. Изменения во время выполнения сохраняются в локальном расположении (где-то в c: \ ProgramData .. или в c: \ Users \ MyUser \ AppData \ Local ..) в зависимости от выбранной области. Таким образом, последующие выпуски вашего приложения могут безопасно вводить новые настройки, не опасаясь уничтожения ранее настроенных значений, поскольку они надежно хранятся.

Надеюсь, это поможет немного прояснить ситуацию.

6 голосов
/ 01 февраля 2013

Один момент, который, похоже, не учитывается в ответах, заключается в том, что файлы .config можно преобразовать с помощью Файлы преобразования . Они доступны для файлов Web.config по умолчанию (в Visual Studio) и включены для произвольных файлов .config с надстройкой SlowCheetah - XML ​​Transforms для Visual Studio (SlowCheetah также добавляет средство предварительного просмотра и применяет преобразования build вместо deploy .

3 голосов
/ 04 июня 2010

Настройки приложения и конфигурационный файл appSettings разделы ограничены парами ключ-значение, которые хороши для простых настроек, но если вам требуется более надежное сохранение данных, вы можете взглянуть на создание пользовательского раздела конфигурации для вашего приложения. Вот статья stackoverflow по созданию пользовательского раздела конфигурации

Наслаждайтесь!

2 голосов
/ 04 июня 2010

Можно вводить настройки приложения, что является плюсом по сравнению с настройками приложения. И способ, которым вы можете получить к ним доступ, немного более аккуратен (свойство), чем получение значения из массива.

И вы можете использовать интерфейс для реализации класса настроек, который хранит ваши настройки в базе данных.

1 голос
/ 05 июня 2010

Что-то, что я сделал раньше, - это создание класса, который содержит свойства, соответствующие параметрам, которые необходимо сохранить. Экземпляр класса затем сериализуется в XML-файл, а затем может быть десериализован, чтобы получить тот же объект, значения свойств не изменились. И приложение не нужно будет перерабатывать, как если бы вы записали его в файл web.config / app.config.

Таким способом вы можете получить строго типизированные настройки приложения, и вам не нужно беспокоиться о ключах и значениях. Это сработало довольно хорошо для меня, когда я хотел предоставить настраиваемые пользователем параметры в приложении.

1 голос
/ 04 июня 2010

Следует помнить одну вещь: если вы развертываете через ClickOnce, несмотря на тот факт, что конфигурационные файлы теперь доступны для записи, их нет в развернутом приложении ClickOnce, так как они будут заполнены хешами файлов.

Следовательно, практическое правило заключается в том, что все, что является конфигурацией среды, помещается в app.config. Все, что пользовательская конфигурация идет в настройках.

Иногда линия немного нечеткая, поэтому для этих нечетких я бы обернул статический метод доступа, чтобы вы могли перемещать их по своему желанию.

0 голосов
/ 04 июня 2010

Я создал тестовое приложение для изучения, так как никогда не удосужился взглянуть на Настройки. Вот несколько случайных находок.

  • Настройки дают вам явное свойство / имя для ссылки в вашем коде, но если вы разбираете скомпилированное приложение, получатель просто ищет значение во внутреннем словаре.
  • Настройки возвращаются в ваш файл .config в отдельном разделе. Может показаться, что вы можете просто отредактировать файл .config, чтобы изменить значение, но это не тот случай, вроде объяснения следующим образом.
  • Согласно приведенной выше документации, кажется, что единственный способ получить значение - использовать Properties.Settings.Default.myColor = Color.AliceBlue;, но это всегда дает вам значение по умолчанию, которое компилируется в ваш код в качестве атрибута свойства. (Я подтвердил это с помощью Reflector. Получатель помечен следующим: [ApplicationScopedSetting, DefaultSettingValue("asdf"), DebuggerNonUserCode]).
  • Настройки строго набраны. Компилятор позаботится о сериализации объектов автоматически (хотя это всего лишь несколько строк кода).

В целом они кажутся ОЧЕНЬ похожими. Диалоговое окно «Настройки» предоставит вам дизайнерский способ настройки значений во время разработки, чего бы это ни стоило. Он также будет обрабатывать сериализацию для вас. Я уверен, что есть какой-то способ получить фактическое значение вместо значения по умолчанию, что было бы хорошим способом отменить любые пользовательские настройки, если это то, что вы сохраняете (т.е. вместо использования текущего значения, просто используйте ссылку по умолчанию) значение.) В настоящее время я не знаю, как ссылаться на текущее значение.

0 голосов
/ 04 июня 2010

Настройки приложения не компилируются в сборку.

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

Я думаю, что Настройки приложения были созданы как более дружественный способ сделать это, особенно из VB.Net, но я не думаю, что есть какие-то огромные различия. По крайней мере, для простых настроек я предпочитаю Настройки приложения по причинам, указанным в ответе LeonG.

...