首页 文章

强制所有用户设置保存

提问于
浏览
0

我有一个C#程序,其中包含存储在程序项目设置中的各种设置 . 由于它是命令行程序,因此用户将在user.config文件中更改这些设置 . 我无法弄清楚如何强制它保存所有默认值 .

当我更新程序中的属性时,调用 Properties.Settings.Default.Save(); 似乎才有效,这会破坏持久性设置文件的要点 .

如果我跑

Properties.Settings.Default.SomeSetting = "Help";
Properties.Settings.Default.Save();

在配置文件中,我会看到类似的东西

< setting name="SomeSetting" serializeAs="String">
    <value>Help</value>
< /setting>

我想要发生的是如果配置文件不存在,创建它并存储所有设置 . 然后,用户可以根据需要更改它们 .

2 回答

  • 0

    设置保存在用户 AppData 文件夹中的某个位置,专门用于给定进程 . 例如,当应用程序在调试器下运行时,您获得的设置与独立运行时不同 .

    我猜想没有简单的方法可以使用这些属性设置在应用程序之间共享设置 . 这段代码很老(.NET 2.0甚至之前),所以我认为它的设计并不容易定制,因为最近的代码经常出现这种情况 .

    我认为设置适用于特定应用程序的特定事物,如果需要跨应用程序共享数据,那么您应该管理自己的文件 .

    通常,可以使用基于XML或JSON的文件,并且如果数据旨在对用户可见,或者如果常规用户在用户应用程序数据目录的子目录下,则数据将被存储(默认情况下)在 My Documents 的子目录下 . 不应该看到那些文件 .

  • 1

    我设法解决它的方法是修改我在不同项目中的一些现有代码来处理版本升级 .

    程序运行时:

    if (PropertiesSettings.Default.UpgradeRequired)
    {
        Properties.Settings.Default.Upgrade();
        Properties.Settings.Default.UpgradeRequired = false;
        Properties.Settings.Default.Save();
        reloadSettings();
    }
    
    // Assign settings to themselves and save
    // This keeps settings the same as the defaults even when upgrading but ensures all settings appear in the config file
    private void reloadSettings()
    {
        Properties.Settings.Default.Setting1 = Properties.Settings.Default.Setting1;
        Properties.Settings.Default.Setting2 = Properties.Settings.Default.Setting2;
        //etc
        Properties.Settings.Default.Save();
    }
    

    默认情况下, UpgradeRequired 设置应设置为True,因此将强制没有配置的新版本运行第一个if语句 . 然后,.NET Properties.Settings.Default.Upgrade(); 应该负责查找旧配置文件并加载旧设置 .

相关问题