2010-06-04 2 views
24

Есть ли рекомендации по использованию Application settings (не для пользовательских настроек) по сравнению с .config файлом <appsettings>?Когда использовать настройки .NET vs config <appsettings>?

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

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

+0

Только что нашел это http://msdn.microsoft.com/en-us/library/k4s6c3a0.aspx –

ответ

3

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

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

+0

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

+1

Копаем немного глубже, я считаю, что основное различие между параметрами приложения и AppSettings в файле конфигурации заключается в том, что параметры Applicaiton будут выполнены. I nto файл ресурсов и AppSettings сохраняется в файле app.config, который можно изменить без повторной компиляции приложения. – Doug

+0

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

0

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

+0

Так ли работает для App.configs? ... Недавно я заметил, что в папке «bin» не было App.config, когда я скомпилировал проект консоли C#? ... его все еще приятно иметь одно место для настроек. – Dal

+0

@Dal - app.config будет скомпилирован в корзину с именем yourexe.exe.config – Reddog

2

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

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

0

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

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

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

0

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

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

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

+0

Если я не помню неправильно (недавно я использовал VB, есть ярлык), чтобы вывести фактические значения, а не по умолчанию, просто создайте экземпляр Properties.Settings и используйте его свойства. –

1

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

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

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

1

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

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

16

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

Опции настройки (в отличие от сырья <AppSettings> раздела) имеет сильную поддержку в рамках:

  1. Настройки сильно типизированных (т.е. BOOL, INT, ConnectionString и т.д.), вместо того, чтобы все возвращается, как строка будет проанализирован код, если потребности быть.

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

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

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

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

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

+2

Одна маленькая достопримечательность, указывающая на то, что в подходе «Настройки» хранятся значения по умолчанию для каждого параметра в ** двух ** местах: App.config ** и **, скомпилированные в файл Settings.Designer.cs. Это заставило некоторых людей работать с печалью, когда они не могут понять, откуда взялось значение настройки. Когда в файле конфигурации отсутствует имя ключа настройки, в стиле старого подхода appSettings вы явно обращаетесь с этим, в то время как новые параметры вернут то, что разработчик установил по умолчанию в конструкторе (и обычно это не то, что вы хотели) , – Nick

5

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