Подтвердить что ты не робот

Когда использовать .NET Settings vs config <appsettings>?

Есть ли рекомендации по использованию Настройки приложения (не для пользовательских настроек) по сравнению с .config файлом <appsettings> ?

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

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

4b9b3361

Ответ 1

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

Параметр настроек (в отличие от секции raw <appSettings> ) имеет сильную поддержку в рамках:

  • Параметры строго типизированы (т.е. bool, int, ConnectionString и т.д.) вместо того, чтобы все возвращались как строка, которую нужно проанализировать вашим кодом, если это необходимо.

  • Настройки могут быть определены как a) Внутренние или общедоступные и b) для пользователя или для приложения (последнее по сути означает Per Machine).

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

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

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

Надеюсь, что это поможет немного разобраться.

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

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

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

Ответ 6

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

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

Ответ 7

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

Ответ 8

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

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

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

Ответ 9

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

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

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