В чем разница между файлом app.config и файлом XYZ.settings?

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

Но я нашел 2 способа сделать это. Когда я открываю диалог добавления нового элемента в Visual Studio 2008, он дает возможность создать файл настроек (.settings) или файл конфигурации (.config). В чем разница между ними и в каком сценарии их следует использовать?


person Hemant    schedule 26.05.2009    source источник


Ответы (3)


ОБНОВЛЕНИЕ: в ASP.NET Core Land конфигурация больше не управляется ни одним из них - посмотрите эту фантастическую запись от Трэвиса Иллига с буквами az на Microsoft.Extension.Configuration и Microsoft.Extensions.Configuration.Binder, которые, по сути, являются надмножеством всего этого


Настройки (как из набора .settings, так и Configuration.AppSettings) хранятся в файле .config [вместе с множеством других вещей].

Разница в том, что материал .settings [который был добавлен в .NET 2.0 / VS2005] накладывает строго типизированный класс поверх набора параметров, которые принадлежат друг другу, тогда как Configuration.AppSettings просто позволяет вам извлекать строки, заставляя вас выполнять любые преобразования, и не имеет понятия о значениях по умолчанию. (класс Configuration был фактически перемещен в боковую сборку, чтобы отразить это - вам нужно явно добавить ссылку на System.Configuration, если вы этого хотите).

Добавление .settings в ваш проект приведет к добавлению app.config для хранения настроек, если у вас его еще нет. Класс, который читает настройки, автоматически создается каждый раз, когда вы меняете список настроек для вашего компонента / приложения.

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

Лучшая причина для использования .Settings обычно заключается в том, что вы получаете возможность четко определять, кто использует какие настройки в базе кода, следя за использованием свойств (и каждый набор является отдельным блоком в файле XML). Configuration.appSettings более глобален по своей природе - это просто набор свойств, и вы не знаете, какая DLL, подсистема или класс зависит от конкретной записи параметра. Дополнительные сведения см. В этом сообщении в блоге Стивена Смита.

Наконец, если вы все еще недостаточно ознакомились с управлением настройками, вам не удастся победить этот пост Рика Страла на эту тему для полноты или огромного количества идей и точек зрения.

В стороне: есть также материал ASP.NET vNext Configuration, , описанный в этой статье, который является довольно гибким и предлагает другой взгляд на управление параметрами конфигурации.

person Ruben Bartelink    schedule 26.05.2009
comment
Спасибо за ответ. Только смутил один момент: Есть 2 типа настроек. Один - это настройка приложения, а другой - пользовательская настройка. Если оба типа настроек хранятся в файле конфигурации, как пользовательские настройки будут отличаться для разных пользователей? - person Hemant; 26.05.2009
comment
Извините за то, что не упомянул об этом. Пользовательские настройки - одна из причин, по которой существуют значения по умолчанию (если пользователь еще не использовал приложение, значения по умолчанию применяются до тех пор, пока изменение не будет сохранено). Пользовательские настройки хранятся в отдельном файле конфигурации в каталоге профиля пользователя (Users \ XXX). Пользовательские настройки также могут быть обновлены (системные не могут использовать API по умолчанию и не должны - они находятся в Program Files, и невозможно безопасно контролировать доступ нескольких пользователей к ним.) - person Ruben Bartelink; 26.05.2009
comment
причем тут менеджер конфигураций? Я пытаюсь и не могу получить это, чтобы сказать мне, где находится мой settings.settings, а затем сохранить там пустую конфигурацию - person JonnyRaa; 10.01.2014
comment
@JonnyLeeds Не уверен, что вы имеете в виду, поэтому я попытаюсь расширить его, чтобы посмотреть, поможет ли это вам .... Ваш .settings файл просто определяет схему и компилируется в программный код. Фактические значения находятся в файле .config, который будет находиться в каталоге профиля пользователя (непользовательские значения недоступны для записи). Данные находятся в том же месте, что и ConfigurationManager.AppSettings, только в настраиваемом формате с более строгим набором параметров. Вы можете делать такие вещи, как ConfigurationManager.OpenExeConfiguration( ConfigurationUserLevel.PerUserRoamingAndLocal ).FilePath, но прежде чем я вам это скажу ... почему? - person Ruben Bartelink; 13.01.2014
comment
@RubenBartelink благодарит за ответ. Это практически тот вывод, к которому я пришел - просто разместил вопрос и ответ, чтобы задокументировать мою боль здесь! - person JonnyRaa; 13.01.2014
comment
См. Также ответ Саймона. - person ToolmakerSteve; 13.08.2017

Файл настроек - это файл ресурсов, в котором вы указываете различные настройки и их значения по умолчанию.

Сами значения настраиваются в файле конфигурации приложения (файл .config).

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

person Gerrie Schenck    schedule 26.05.2009
comment
Пока я нахожусь в придирчивом режиме (только что обновил свой пост - там много чего не хватает). Кроме того, пользовательские значения сохраняются в отдельной области вне файла .config. Файл .config необходимо развернуть, если у вас есть настройки, отличные от настроек по умолчанию (атрибуты в сгенерированном классе настроек управляют значениями по умолчанию, если в файле конфигурации ничего не указано). - person Ruben Bartelink; 10.11.2009
comment
Пока XML-файл Settings.settings не развернут, файл Settings.Designer.cs компилируется в приложение, не так ли? - person Kyle Delaney; 17.11.2017

Файл app.config хранится в том же каталоге, что и приложение. Обычные пользователи не будут иметь прав на запись (например, в «Программных файлах»).

Файл настроек должен храниться в каталоге «AppData» пользователя (где у него есть права чтения / записи).

Поэтому используйте файл настроек для настраиваемых пользователем параметров.

person laktak    schedule 01.09.2010
comment
Не совсем верно, согласно другим ответам: stackoverflow.com/a/909712/199364, stackoverflow.com/a/13072966/199364 .settings (и поддержка Settings Visual Studio) можно использовать как для одноразовой конфигурации приложения, так и для индивидуальной конфигурации пользователя. .settings не существует во время выполнения; во время выполнения существует app.config в папке приложения и [пользователь] .config в папке данных пользователя. - person ToolmakerSteve; 13.08.2017