C# .NET设置有问题。重新加载()和设置。保存()设置未加载
我有一个奇怪的问题,我想不出来。我有一个继承ApplicationSettingsBase的自定义设置类。它具有如下所示的用户范围设置C# .NET设置有问题。重新加载()和设置。保存()设置未加载,c#,.net,configuration,settings,C#,.net,Configuration,Settings,我有一个奇怪的问题,我想不出来。我有一个继承ApplicationSettingsBase的自定义设置类。它具有如下所示的用户范围设置 /// <summary> /// The Last Active Account /// </summary> [UserScopedSettingAttribute()] public AccountKeyClass ActiveAccount { get
/// <summary>
/// The Last Active Account
/// </summary>
[UserScopedSettingAttribute()]
public AccountKeyClass ActiveAccount
{
get
{
try
{
return (AccountKeyClass)this["ActiveAccount"];
}
catch(Exception error){}
return null;
}
set
{
this["ActiveAccount"] = value;
if (!this.AccountList.Contains(value))
{
//this.AccountList.Add(value);
}
}
}
/// <summary>
/// Account List
/// Key: UserID
/// Value: AccountKeyClass
/// </summary>
[UserScopedSettingAttribute()]
public List<AccountKeyClass> AccountList
{
get
{
try
{
if(this["AccountList"] != null)
return (List<AccountKeyClass>)this["AccountList"];
}
catch(Exception error){}
return null;
}
set { this["AccountList"] = value; }
}
//
///最后一个活动帐户
///
[UserScopedSettingAttribute()]
公共帐户KeyClass ActiveAccount
{
得到
{
尝试
{
返回(AccountKeyClass)此[“ActiveAccount”];
}
捕获(异常错误){}
返回null;
}
设置
{
此[“ActiveAccount”]=值;
如果(!this.AccountList.Contains(value))
{
//此.AccountList.Add(值);
}
}
}
///
///帐户列表
///密钥:用户ID
///值:AccountKeyClass
///
[UserScopedSettingAttribute()]
公开名单
{
得到
{
尝试
{
如果(此[“AccountList”]!=null)
返回(列出)此[“会计清单”];
}
捕获(异常错误){}
返回null;
}
设置{this[“AccountList”]=value;}
}
我有两个表单,一个主表单和一个设置表单,可以在其中更改应用程序设置。当我创建SettingsForm和change AccountList设置值时,user.config文件会发生异常更改。设置的“应用/确定”按钮窗体先调用Settings.Save(),然后调用Settings.Reload(),然后关闭窗体。问题是当调用.Reload()时,Settings.AccountList变为null
更重要的是user.config文件永远不会更改,如果我关闭应用程序并重新打开,user.config文件仍然正确,但Settings.AccountList永远不会被读入
但是,如果我从未调用.Reload(),则会读入Settings.AccountList
更新:
如果我创建一个列表并保存();从我的MainForm,然后将从我的user.config.fine读入AccountList。但是,如果我使用辅助表单(SettingsForm)添加到AccountList并调用Save(),则下次运行应用程序时,不会读入设置,并在其位置返回空值。即使我不使用Reload(),也会发生这种情况
我认为问题与使用通用列表有关。正在保存的AccountKeyClass被保存为序列化XML。我记得.Reload()存在类似的问题。只是为了好玩。。。尝试在发行版中运行它,或者在安装程序中运行任何非调试模式(如果您尚未这样做)。请澄清您是在更改AccountList属性还是在更改其内容 如果在列表中添加或删除项,则Settings.Save()将不会保存该项,因为它看不到该属性已更改 试着这样做:
var temp = settings.AccountList;
settings.AccountList = null;
settings.AccountList = temp;
settings.Save();
我还要加上这个。我当时在想它可能与设计器/调试器(VStudio)有关。因此,我尝试直接从bin\debug目录运行应用程序,因此没有附加调试器。不过,我没有尝试从发布版本运行它,我一回到家就会尝试。这似乎不起作用。但是我在原来的问题中添加了一个更新。你是说.Save()只保存/写入已更改的值吗?当我从主窗体中执行.Save()时,即使我正在执行.Add(),它似乎也能正常工作。我试试看会发生什么。谢谢你的回复。