【问题标题】:Force all user settings to save强制所有用户设置保存
【发布时间】:2016-12-02 15:46:15
【问题描述】:

我有一个 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>

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

【问题讨论】:

    标签: c# settings


    【解决方案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(); 应该负责查找旧配置文件并加载旧设置。

    【讨论】:

      【解决方案2】:

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

      我猜想没有简单的方法可以使用这些属性设置在应用程序之间共享设置。该代码已经很老了(.NET 2.0 甚至更早版本),所以我认为它的设计不是为了易于定制,因为更新的代码通常就是这种情况。

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

      通常,人们会使用基于 XML 或 JSON 的文件,如果数据旨在对用户可见,则数据将存储(默认情况下)在 My Documents 的子目录下或用户应用程序数据的子目录下如果普通用户不应该看到这些文件,则目录。

      【讨论】:

      • 这并不能真正回答问题。我将在问题中添加更多细节。
      • 好吧,我认为真正的答案几乎是一样的......我想这是不可能的,因为该代码的设计方式不允许进行大量定制。因此,如果设置不符合您的需要,您已经编写了自己的系统。
      • 另一种方法可能是使用PropertyGrid 允许用户从应用程序内部编辑设置。这样,您将看到所有属性,甚至比直接编辑文件更加用户友好。
      猜你喜欢
      • 2010-12-05
      • 1970-01-01
      • 2017-09-15
      • 2019-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多