Настройки приложения доступны только для чтения во время выполнения. Вы можете установить / изменить их либо с помощью текстового редактора в файле app.config напрямую, но рекомендуется открыть свойства проекта в Visual Studio и выбрать вкладку «Настройки». Важно установить правильную область действия:
- Если настройки применяются ко всему приложению (для всех пользователей), выберите «Приложение» в качестве области действия.
- Если у каждого пользователя должны быть индивидуальные настройки (привязанные к профилю пользователя), выберите «Пользователь»
Например, если вы создаете myOwnSetting в своем проекте WindowsFormsTestApplication1 следующим образом:
добавит следующее в файл app.config приложения:
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="WindowsFormsTestApplication1.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<WindowsFormsTestApplication1.Properties.Settings>
<setting name="myOwnSetting" serializeAs="String">
<value>Hi there!</value>
</setting>
</WindowsFormsTestApplication1.Properties.Settings>
</applicationSettings>
</configuration>
Visual Studio создает код C # для автоматического доступа к этому параметру (именно поэтому вы должны делать это в свойствах проекта, а не в текстовом редакторе) - после сохранения изменений в том же пространстве имен вы можете прочитать его значение в приложение легко с помощью следующего кода:
var currentValue = Properties.Settings.Default.myOwnSetting;
Учитывая applicationSettings
в приведенном выше листинге, будет получена строка "Привет!" для переменной currentValue
.
Обратите внимание , что если вы создали myOwnSetting для «Пользователь» области действия , то она сохраняется в разделе с именем <userSettings>
вместо <applicationSettings>
, но вы все равно можете получить к нему доступ с помощью строки кода выше.
Еще одно отличие настроек «Пользователь» состоит в том, что у вас есть доступ для чтения и записи, т. Е. Разрешено делать следующее:
Properties.Settings.Default.myUserSetting = "Something else";
Properties.Settings.Default.Save();
Если вы попытаетесь сделать то же самое с настройкой области приложения «myOwnSetting», это приведет к ошибке времени компиляции, сообщающей, что она доступна только для чтения.
Если вы перезапустите приложение, вы заметите, что myUserSetting изменилось на значение «Something else» - но старое значение все еще находится в app.config. Почему это так? Причина в том, что оно рассматривается как значение по умолчанию - и, как я уже говорил, область действия «Пользователь» привязана к профилю пользователя. Как следствие, значение «Нечто другое» сохраняется в
C:\Documents and Settings\USERID\Local Settings\Application Data\FIRMNAME\WindowsFormsTestApplicati_Url_tdq2oylz33rzq00sxhvxucu5edw2oghw\1.0.0.0
в файле с именем User.config
, который выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<userSettings>
<WindowsFormsTestApplication1.Properties.Settings>
<setting name="myUserSetting" serializeAs="String">
<value>Something else</value>
</setting>
</WindowsFormsTestApplication1.Properties.Settings>
</userSettings>
</configuration>
Вы не можете точно указать путь, так как он создается автоматически .NET Framework, и он будет выглядеть по-другому на вашем ПК. Но вы можете видеть, что USERID - это идентификатор пользователя Windows вашего текущего пользователя, FIRMNAME - это часть информации о сборке, которую вы указали, а имя и версия сборки также используются в пути.
Примечание:
Объявление <sectionGroup>
с <section>
является обязательным, и его атрибут name должен совпадать с пространством имен. Пространство имен должно появляться в конфигурации ровно один раз, и допускается только один раздел applicationSettings
.
Как вы могли видеть в файле конфигурации, пространство имен там явно упоминается (WindowsFormsTestApplication1.Properties.Settings
). Как следствие, если вы хотите получить доступ к настройкам из кода, который не находится в одном и том же пространстве имен, вам может понадобиться использовать полную ссылку. Сказав это, будьте осторожны, если вы копируете весь раздел <applicationSettings>...</applicationSettings>
из конфигурации одного приложения в другое - вам может потребоваться впоследствии изменить пространство имен в конфигурации назначения.
Если вы используете конструктор настроек (вкладка «Настройки» в своем проекте), он создаст файл с именем Settings.Settings
(вместе с Settings.Designer.cs
для доступа к сеансам через код C # ) в разделе «Свойства» вашего проекта. Это копия настроек, так как она также будет сохранена в вашем файле Web.config
или App.config
(в зависимости от типа вашего проекта, только для настроек области приложения - настройки области пользователя хранятся на основе профиля пользователя). Вы можете создавать дополнительные *.settings
файлы и использовать их (как описано здесь ).
Если вы не используете дизайнер настроек или используете инструмент, подобный LinqPad , вам может потребоваться другой подход. Учтите это:
internal static string GetApplicationSetting(string key,
string nameSpace="Properties.Settings")
{
string xValue=null;
try
{
string path = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile;
XDocument doc = XDocument.Load(path);
var xPathStr= string.IsNullOrEmpty(nameSpace)
? "//applicationSettings"
: $"//applicationSettings/{nameSpace}";
var settings=doc.XPathSelectElement(xPathStr).Elements().Where(
w => w.Name=="setting"
&& w.HasAttributes
&& w.Attribute("serializeAs").Value=="String"
);
var setting=settings.Where(f => f.HasAttributes
&& f.Attribute("name").Value==key).Elements();
xValue=setting.FirstOrDefault().Value;
}
catch {}
return xValue;
}
Вы можете прочитать тип строки applicationSettings
, рассматривая конфигурацию как XDocument
. Приведенный пример ограничен типом строки, и вы можете получить настройку из приведенного выше примера app.config следующим образом:
var value=GetApplicationSetting("myOwnSetting", "WindowsFormsTestApplication1.Properties.Settings");
Аналогично, вы можете создать аналогичную функцию GetUserSetting для секции по умолчанию <userSettings>
: просто скопируйте приведенный выше код, переименуйте имя функции и замените applicationSettings
в xPathStr
на userSettings
.
Для пользовательских настроек доступен метод обновления, который описан здесь . Более подробную информацию о месте, где хранятся пользовательские настройки, можно найти там .
Раздел <appSettings>
в конфигурации работает по-разному, поскольку он не различает область действия «Пользователь» и «Приложение» и не поддерживает разные типы данных, а только строки. Тем не менее, можно легко читать и записывать ключи / значения конфигурации.
Если вы заинтересованы в коде, вы можете найти его здесь (на stackoverflow):
как читать / записывать настройки конфигурации appSettings
Если вы не уверены, следует ли вам использовать AppSettings
или applicationSettings
, тогда прочитайте это , прежде чем принять решение.