Я пытаюсь сохранить пользовательские настройки в 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 # повторно использовать настройки после перезапуска приложения?