Настройки.настройки и приложения.config in.NET настольное приложение [дубликат]
Возможные Дубликаты:
в чем разница между приложением.файл config и XYZ.файл настроек?
меня очень смущает очевидная избыточность этих двух механизмов в Visual Studio для хранения и управления настройками настольных приложений:
- вы можете использовать XML
app.config
файл, добавление элементов в . Они могут быть получены из кода с помощьюConfigurationManager
класс. - кроме того, вы можете использовать настройки.файл настроек для добавления отдельных настроек через редактор. Visual Studio создаст
Settings
класс для типобезопасного извлечения настроек во время выполнения.
эти два механизма, по-видимому, служат одной и той же (или почти одной) цели. Я знаю, что есть некоторые различия, но я также озадачен перекрытием и его последствиями. Например, когда я использую Visual Studio для добавления параметров в все информация, которую я ввел, заканчивается как записи в app.config
файл, а также. По-видимому, механизм синхронизации существует: если я изменю настройку в app.config
файл, Visual Studio предлагает мне обновить Settings.settings
файл в следующий раз, когда я открою его в Редакторе.
мои вопросы:
- почему два механизма, а не только один?
- каковы наиболее распространенные сценарии использования
app.config
overSettings.settings
, и наоборот? - что происходит если мое приложение использует
Settings.settings
и я меняю значение вapp.config
после того, как он был развернут? Нет синхронизацииSettings.settings
может произойти, так как он уже был скомпилирован и распространен.
Примечание. Я искал вопросы на эту тему, но я еще больше запутался. Например, ответы на этот вопрос здесь весьма противоречивы и не проливают много света.
примечание 2. Я знаю, что app.config
Это имя файла времени разработки, и я знаком с динамикой Visual Studio копирование и переименование его в исполняемую папку.
2 ответа:
С точки зрения .NET Framework (не говоря уже об инструментах - Visual Studio - на данный момент), исторически было только
[app.exe].config
(на самом деле, это то, что AppDomain определяет как файл конфигурации. Имя определяется доменом приложения, поэтому оноweb.config
для веб-приложений...) иmachine.config
. "приложение" развернут вместе с приложением, "машина" для всей машины. Они должны были быть "довольно" только для чтения для среднего пользователя. Можно их изменить, но это было не идея.но как я могу сохранить настройки конечного пользователя тогда? Вот почему [пользователь].конфигурация была введена (я считаю, с .NET 2). Официальная документация гласит следующее:
система конфигурации, которая была первоначально выпущена с .NET Платформа поддерживает предоставление статических данных конфигурации приложения с помощью локального компьютера.конфигурационный файл или в пределах приложение.исполняемый.конфигурационный файл, который развертывается вместе с приложением. Этот Класс LocalFileSettingsProvider расширяет эту встроенную поддержку в следующие способы:
1) Настройки области применения могут храниться в любом устройстве.конфиг или приложение.исполняемый.конфигурационный файл. Машина.конфигурация всегда доступна только для чтения, в то время как приложение.исполняемый.конфигурация ограничена соображениями безопасности только для чтения для большинства приложений.
2) пользовательские настройки могут быть сохранены в приложении.исполняемый.конфигурационные файлы, в которых случае они рассматриваются как статические значения по умолчанию.
3) нестандартные пользовательские настройки сохраняются в новом файле, пользователь.config, где user-это имя пользователя текущего пользователя выполнение приложения. Можно указать значение по умолчанию для области действия пользователя установка с DefaultSettingValueAttribute. Потому что пользовательская область настройки часто меняются во время выполнения приложения, пользователь.конфиг есть всегда читать / писать.
таким образом, с точки зрения .NET Framework, существует только один 3-слойный механизм.
Теперь, Визуальный Studio просто пытается помочь вам, создав типобезопасный код для конечных настроек чтения/записи. Большую часть времени, что [пользователь].файл конфигурации не существует и значение параметра будет определяться тем, что находится в
DefaultSettingValueAttribute
(определенными для каждого параметра), или использовать то, что было определено статически в приложение.конфиг. Вот почему Visual Studio также обновляет приложение.конфигурационный файл, так что вы можете определить статические значения по умолчанию для настроек. Но вы можете прекрасно удалить все это приложение.конфигурационный материал.
почему два механизма, а не только один?
они служат разным целям. API настроек предлагает доступ для чтения / записи из приложения, тогда как config доступен только для чтения (если вы не пишете файл в коде).
настройки могут быть определены для каждого пользователя или для каждого приложения, и предназначены, чтобы быть неустойчивым. Пользовательские настройки записываются в скрытую папку в хранилище профилей пользователей, которое разрешено в UAC.
приложение.конфиг в только приложение. Изменения в приложении.конфигурация не подбирается автоматически. Для обновления значений требуется перезапуск или код. В соответствии с UAC пользователям не разрешается записывать в каталоги приложений, такие как программные файлы, поэтому этот файл должен считаться статическим только для чтения.
каковы наиболее распространенные сценарии использования приложения.конфигурации по Настройки.настройки, и наоборот?
вы можете использовать настройки в настольном приложении для хранения пользовательские настройки или параметры, которые изменяются во время выполнения.
вы бы использовали приложение.конфигурация для более общих статических параметров, таких как строки подключения и т. д., или для определения конфигурации компонентов, используемых в вашем приложении.
что произойдет, если мое приложение использует параметры.настройки и меняю значение в приложении.конфигурация после ее развертывания?
если приложение будет повторно развернуто, то оно будет подбирать новые настройки, если нет пользователь/приложение Настройки на автомат уже в этом случае он будет продолжать использовать их, если вы не уничтожить их.
Если вы добавите новые настройки,они будут подобраны. На самом деле значения по умолчанию запекаются в классе настроек, так что даже если приложение.конфигурация пуста настройки по-прежнему работают.