保存用户范围的设置 (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>

如有任何建议,我们将不胜感激。

如果没有可靠地重现问题的 minimalcomplete 代码示例,则无法确定是什么问题是。

但是,根据您发布的内容,您似乎误解了设置设计器与您的自定义设置之间的关系 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