在 C# 中使用设置类

Posted

技术标签:

【中文标题】在 C# 中使用设置类【英文标题】:Using Settings Class in C# 【发布时间】:2012-11-24 08:36:00 【问题描述】:

我正在使用Properties.Settings 类来保存应用程序设置。我想知道,一旦我在客户端系统中部署,设置是否会在应用程序重启和系统重启时保存。

考虑场景:

部署应用程序后,用户将通过 UI 将手机号码保存为

电话:1xxxx - 45678

现在,我将电话号码另存为

 Properties.Settings.Default.ClientPhone = this.PhoneText.Text;
 Properties.Settings.Default.Save();

我知道电话号码会在 app.restarts 和 reboots 中保存在应用程序中吗?

【问题讨论】:

试试看怎么样? 您是否尝试过使用它,然后在应用重启后检查该值? Read On 很好,我仍在开发中。我必须决定是采用这种方法还是使用其他一些技术可能会将其保存在配置文件中 用户设置实际上存储在用户配置文件深处的 XML 文件中。不要重新发明***! 【参考方案1】:

这是关于应用程序和用户设置的区别。应用程序设置是只读的。用户设置永久存储在每个用户的基础上。 您的代码正是更改和保存用户设置所需的代码

请注意:由于它们被称为“用户设置”,它们将分别为机器上的每个用户存储!您不能使用默认的 .NET 设置机制创建对所有用户都相同的可变设置。

不要重新发明***!使用 .NET 设置机制 - 你在你的例子中做对了:-)

【讨论】:

另请参阅 Matthew Watson 的回答,该回答向您展示了如何在部署新版本后升级设置。【参考方案2】:

这可以正常工作,但是要记住的一点是,如果您安装新版本的程序,它将“丢失”旧设置(因为这些设置特定于您的程序的特定版本)。 (“版本”是指 AssemblyVersion)

幸运的是,您可以通过在 Main() 开始处或附近调用以下函数来处理此问题。为此,您需要添加一个名为 NeedSettingsUpgrade 的新布尔设置属性并将其默认为“true”:

/// <summary>Upgrades the application settings, if required.</summary>

private static void upgradeProgramSettingsIfNecessary()
                                                        
    // Application settings are stored in a subfolder named after the full #.#.#.# version
    // number of the program. This means that when a new version of the program is installed,
    // the old settings will not be available.
    //
    // Fortunately, there's a method called Upgrade() that you can call to upgrade the settings
    // from the old to the new folder.
    //
    // We control when to do this by having a boolean setting called 'NeedSettingsUpgrade' which
    // is defaulted to true. Therefore, the first time a new version of this program is run, it
    // will have its default value of true.
    //
    // This will cause the code below to call "Upgrade()" which copies the old settings to the new.
    // It then sets "NeedSettingsUpgrade" to false so the upgrade won't be done the next time.

    if (Settings.Default.NeedSettingsUpgrade)
    
        Settings.Default.Upgrade();
        Settings.Default.NeedSettingsUpgrade = false;
    

【讨论】:

在将NeedSettingsUpgrade 设置为false 之后,您也需要保存设置:) 是的,但最好等到更改一些其他设置。通常,如果程序正常关闭,我会在程序结束时调用 .Save() 。有些人喜欢在更改任何设置后调用 .Save() - YMMV! :)【参考方案3】:

一个快速的谷歌应该已经为你完成了。

是的,他们会根据 msdn:.NET allows you to create and access values (settings) that are persisted between application execution sessions.

http://msdn.microsoft.com/en-us/library/aa730869(v=vs.80).aspx

【讨论】:

"此文档已存档,不再维护。" - 所以没有。

以上是关于在 C# 中使用设置类的主要内容,如果未能解决你的问题,请参考以下文章

使用反射设置 C# 结构/类字段时是不是可以避免装箱?

C#中StreamWriter类使用总结

C# 为班级设置特定的文化

在使用 EF 期间如何在 c# 中为类添加额外的属性

如何在 C# 中获取和设置环境变量?

C#设置文件权限