保存用户范围的设置 (ApplicationSettingsBase)
Saving user scoped settings (ApplicationSettingsBase)
我正在尝试让我的应用程序设置在用户退出配置表单(不是我的主表单)时保存。它会将设置保存在内存中,因为当我再次打开表单时,它会保留我配置的数据,但不会将其保存到磁盘。这是将 xml 文件保存到
的文件路径
C:\Users\david_000\AppData\Local[公司名][项目名]\1.0.0.0.
我在 class 中使用 [UserScopedSetting()] 来实现 ApplicationSettingsBase 文件,所以它应该在我调用时保存,
Properties.Settings.Default.Save();
这是我的 class 使用 ApplicationSettingsBase
public class DeviceConfiguration : ApplicationSettingsBase
{
/// <summary>
/// Initializes a new instance of the <see cref="DeviceConfiguration"/> class.
/// </summary>
public DeviceConfiguration()
: base()
{
this.MasterDevices = new BindingList<Device>();
this.SlaveDevices = new BindingList<Device>();
}
[UserScopedSetting()]
[SettingsSerializeAs(System.Configuration.SettingsSerializeAs.Xml)]
public BindingList<Device> MasterDevices
{
get
{
return this["MasterDevices"] as BindingList<Device>;
}
set
{
this["MasterDevices"] = value;
}
}
[UserScopedSetting()]
[SettingsSerializeAs(System.Configuration.SettingsSerializeAs.Xml)]
public BindingList<Device> SlaveDevices
{
get
{
return this["SlaveDevices"] as BindingList<Device>;
}
set
{
this["SlaveDevices"] = value;
}
}
}
我的 BindingList 包含多个属性,class 正在使用 [Serializable] 属性。但是当我保存 xml 文件时,它只保存了这个:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<userSettings>
<[company.project].Properties.Settings>
<setting name="IpAddressBESS" serializeAs="String">
<value>192.168.3.254</value>
</setting>
<setting name="PortBESS" serializeAs="String">
<value>504</value>
</setting>
<setting name="IpAddressInverter" serializeAs="String">
<value>192.168.3.200</value>
</setting>
<setting name="PortInverter" serializeAs="String">
<value>502</value>
</setting>
<setting name="StartDate" serializeAs="String">
<value>04/08/2015 08:00:00</value>
</setting>
<setting name="EndDate" serializeAs="String">
<value>04/08/2015 16:00:00</value>
</setting>
<setting name="DeviceConfig" serializeAs="Xml">
<value />
</setting>
</[company.project].Properties.Settings>
</userSettings>
</configuration>
如有任何建议,我们将不胜感激。
如果没有可靠地重现问题的 minimal、complete 代码示例,则无法确定是什么问题是。
但是,根据您发布的内容,您似乎误解了设置设计器与您的自定义设置之间的关系 ApplicationSettingsBase
class。
特别是,Properties.Settings.Default
通常 return Designer 创建的 class 实例,名为 Settings
。调用 Properties.Settings.Default.Save();
将仅保存该对象中的值,而不保存其他 class.
中的值
如果您有一个单独的 class DeviceConfiguration
要保存(正如您在发布的代码中所做的那样),您需要明确地处理它。仅仅拥有 ApplicationSettingsBase
的 subclass 的实例是行不通的。您需要自己调用该自定义子 class 上的 Save()
方法。
另请参阅 MSDN 上的 How to: Create Application Settings。
我正在尝试让我的应用程序设置在用户退出配置表单(不是我的主表单)时保存。它会将设置保存在内存中,因为当我再次打开表单时,它会保留我配置的数据,但不会将其保存到磁盘。这是将 xml 文件保存到
的文件路径C:\Users\david_000\AppData\Local[公司名][项目名]\1.0.0.0.
我在 class 中使用 [UserScopedSetting()] 来实现 ApplicationSettingsBase 文件,所以它应该在我调用时保存,
Properties.Settings.Default.Save();
这是我的 class 使用 ApplicationSettingsBase
public class DeviceConfiguration : ApplicationSettingsBase
{
/// <summary>
/// Initializes a new instance of the <see cref="DeviceConfiguration"/> class.
/// </summary>
public DeviceConfiguration()
: base()
{
this.MasterDevices = new BindingList<Device>();
this.SlaveDevices = new BindingList<Device>();
}
[UserScopedSetting()]
[SettingsSerializeAs(System.Configuration.SettingsSerializeAs.Xml)]
public BindingList<Device> MasterDevices
{
get
{
return this["MasterDevices"] as BindingList<Device>;
}
set
{
this["MasterDevices"] = value;
}
}
[UserScopedSetting()]
[SettingsSerializeAs(System.Configuration.SettingsSerializeAs.Xml)]
public BindingList<Device> SlaveDevices
{
get
{
return this["SlaveDevices"] as BindingList<Device>;
}
set
{
this["SlaveDevices"] = value;
}
}
}
我的 BindingList 包含多个属性,class 正在使用 [Serializable] 属性。但是当我保存 xml 文件时,它只保存了这个:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<userSettings>
<[company.project].Properties.Settings>
<setting name="IpAddressBESS" serializeAs="String">
<value>192.168.3.254</value>
</setting>
<setting name="PortBESS" serializeAs="String">
<value>504</value>
</setting>
<setting name="IpAddressInverter" serializeAs="String">
<value>192.168.3.200</value>
</setting>
<setting name="PortInverter" serializeAs="String">
<value>502</value>
</setting>
<setting name="StartDate" serializeAs="String">
<value>04/08/2015 08:00:00</value>
</setting>
<setting name="EndDate" serializeAs="String">
<value>04/08/2015 16:00:00</value>
</setting>
<setting name="DeviceConfig" serializeAs="Xml">
<value />
</setting>
</[company.project].Properties.Settings>
</userSettings>
</configuration>
如有任何建议,我们将不胜感激。
如果没有可靠地重现问题的 minimal、complete 代码示例,则无法确定是什么问题是。
但是,根据您发布的内容,您似乎误解了设置设计器与您的自定义设置之间的关系 ApplicationSettingsBase
class。
特别是,Properties.Settings.Default
通常 return Designer 创建的 class 实例,名为 Settings
。调用 Properties.Settings.Default.Save();
将仅保存该对象中的值,而不保存其他 class.
如果您有一个单独的 class DeviceConfiguration
要保存(正如您在发布的代码中所做的那样),您需要明确地处理它。仅仅拥有 ApplicationSettingsBase
的 subclass 的实例是行不通的。您需要自己调用该自定义子 class 上的 Save()
方法。
另请参阅 MSDN 上的 How to: Create Application Settings。