Постоянные настройки пользователя
Я пытаюсь сохранить пользовательские настройки в C# и использовать их в следующем сеансе.
По всей сети можно найти следующие подсказки: Как программно сохранить пользовательские настройки?
у меня есть .setting
файл в моем проекте с настройками по умолчанию.
Когда пользователь меняет настройки, я звоню save
, И в %APPDATA%
появится файл с пользовательскими настройками. Это выглядит так:
private void SetSetting(string prop, Object val)
{
try
{
string strval = String.Format("G{0}_{1}", Group_Id, prop);
Properties.Last.Default[strval] = val;
}
catch
{
System.Configuration.SettingsProperty property = new System.Configuration.SettingsProperty(String.Format("G{0}_{1}", Group_Id, prop));
property.PropertyType = Properties.Def.Default[String.Format("G0_{1}", Group_Id, prop)].GetType();
property.DefaultValue = Properties.Def.Default[String.Format("G0_{1}", Group_Id, prop)];
property.PropertyType = val.GetType();
property.Provider = Properties.Last.Default.Providers["LocalFileSettingsProvider"];
property.Attributes.Add(typeof(System.Configuration.UserScopedSettingAttribute), new System.Configuration.UserScopedSettingAttribute());
Properties.Last.Default.Properties.Add(property);
Properties.Last.Default.Reload();
string strval = String.Format("G{0}_{1}", Group_Id, prop);
Properties.Last.Default[strval] = val;
}
Properties.Last.Default.Save();
}
Как видите, у меня есть экземпляр настроек Last
как в "настройках из последней сессии" и Def
как по умолчанию.
По сути, пользователь может добавлять и удалять группы по своему усмотрению в приложении. Def
содержит конфигурацию по умолчанию для новой группы. Last
должно содержать количество групп в последнем сеансе пользователя, а также свойства каждой группы. Таким образом, форматирование с Group_Id
и так далее.
Итак, как я уже сказал. Во время выполнения это нормально. Пользовательские настройки правильно записаны в файл в %APPDATA%
и все.
Файл выглядит так:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5629387e089" >
<section name="Project1.Properties.Last" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c5629387e089" " allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<userSettings>
<Project1.Properties.Last>
<setting name="G1_do_cut" serializeAs="String">
<value>True</value>
</setting>
</Project1.Properties.Last>
</userSettings>
</configuration>
Итак, настройка для do_cut
для группы 1 сохраняется как G1_do_cut
Но как только я перезагружаю приложение, пользовательские настройки игнорируются. Используемый код:
private Object GetSetting(string prop)
{
try { return Properties.Last.Default[String.Format("G{0}_{1}", Group_Id, prop)]; }
catch { return Properties.Def.Default[String.Format("G0_{1}", Group_Id, prop)]; }
}
и в попытке, исключение G1_do_cut is not found in settings
брошен и улов загружает по умолчанию.
Во время сеанса пользователя GetSettings
работает правильно - если я пытаюсь читать G1_do_cut
после того, как это было установлено, никакое исключение не выдается, и я получаю правильное значение.
Как заставить C# повторно использовать настройки после перезапуска приложения?