Когда использовать настройки .NET или config ‹appsettings›?

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

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

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


person John K    schedule 04.06.2010    source источник
comment
Только что нашел этот msdn.microsoft.com/en-us/library/k4s6c3a0.aspx   -  person John K    schedule 04.06.2010


Ответы (8)


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

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

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

  2. Параметры могут быть а) внутренними или общедоступными и б) на пользователя или на приложение (последнее, по сути, означает на машину).

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

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

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

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

person PjL    schedule 25.04.2012
comment
Стоит отметить одну небольшую ошибку: подход «Настройки» сохраняет значения по умолчанию для каждой настройки в двух местах: в App.config и, скомпилированном в файл Settings.Designer.cs. Это вызывает у некоторых людей, с которыми я работаю, горе, когда они не могут понять, откуда берется значение параметра. Когда имя ключа настройки отсутствует в файле конфигурации, подход appSettings в старом стиле заставляет вас явно обрабатывать это, в то время как более новые параметры будут возвращать то, что разработчик установил по умолчанию в дизайнере (и обычно это не то, что вы хотели) . - person Nick; 24.01.2014

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

person Caleb Bell    schedule 01.02.2013

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

Наслаждаться!

person Doug    schedule 04.06.2010
comment
Раньше я создавал настраиваемые разделы конфигурации и на этот раз уже отказался от этой опции. В настоящее время я ищу некоторые из более тонких различий между этими двумя типами настроек, чтобы принять решение. - person John K; 04.06.2010
comment
Копаем немного глубже; Я считаю, что основное различие между настройками приложения и AppSettings в файле конфигурации заключается в том, что настройки приложения добавляются в файл ресурсов, а AppSettings сохраняется в файле app.config, который можно изменить без перекомпиляции приложения. - person Doug; 04.06.2010
comment
Сначала требуется много работы для создания настраиваемых классов конфигурации, но иногда это может сэкономить ваше время. Например, они упрощают, если вам нужно сериализовать (сохранить) изменения в вашем файле конфигурации. - person JohnB; 04.06.2010
comment
Я согласен с JohnB - больше предварительной работы, но после ее завершения она намного полезнее с точки зрения сохранения изменений и общей проверки. Помните, что вы получаете всю встроенную проверку фреймворка и обработку ошибок бесплатно при создании настраиваемого раздела конфигурации. - person Doug; 04.06.2010

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

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

person LeonG    schedule 04.06.2010

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

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

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

person Reddog    schedule 04.06.2010

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

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

person Grant Palin    schedule 05.06.2010

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

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

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

person Hans Olsson    schedule 04.06.2010

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

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

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

person Tim Coker    schedule 04.06.2010
comment
Если я не ошибаюсь (я недавно использовал VB, где был ярлык), чтобы получить фактические значения, а не значения по умолчанию, просто создайте экземпляр Properties.Settings и используйте его свойства. - person Hans Olsson; 04.06.2010