如何在应用程序运行时更改应用程序设置(设置)?

8

我写了一个类,可以轻松读取和写入应用程序设置中的值:

public static class SettingsManager
    {
        public static string ComplexValidationsString
        {
            get { return (string)Properties.Settings.Default["ComplexValidations"]; }
            set
            {
                Properties.Settings.Default["ComplexValidations"] = value;
                Properties.Settings.Default.Save();
            }
        }

问题在于这个值实际上没有被保存,也就是说当我退出应用程序并重新运行时它并没有改变。我该怎么做才能确保保存的值在关闭和再次打开之间持续存在?


1
那应该是可以保存的,在我看来没有任何问题。 - Lloyd Powell
4个回答

11

设置范围必须是用户而不是应用程序。


在Settings.designer.cs中的设置前添加以下代码: [global::System.Configuration.UserScopedSettingAttribute()] 或者直接在settings1.settings中更改作用域。 - Woland

5

您应该检查

Properties.Settings.Default.Properties["ComplexValidations"].IsReadOnly

也许Roland所说的“应用程序范围”就是这个意思。保存操作会默默失败。请查看项目|属性|设置,第三列。

2

你确定它没有保存更改吗?bin文件夹中的[ProgramName].exe.config文件将不会更新。实际使用的文件通常放置在C:\ Documents and Settings \ [user] \ Local Settings \ Application Data \ [company name] \ [application] .exe [hash string] \ [version] \ user.config中。我知道当我尝试这种事情时,花了我一段时间才意识到正在更新的是这个文件。


无论它正在更新哪个文件,我希望看到ComplexValidationsString的值被设置为上一次打开应用程序时设置的值。 - agnieszka

0

我刚刚测试了一个用户设置,如果您运行此控制台应用程序两次,则该设置将被保留:

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine(Settings1.Default.Setting);
        Console.ReadLine();
        Settings1.Default.Setting = "A value different from app.config's";
        Settings1.Default.Save();
    }
}

试一试吧,只需要一分钟。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接