C# 如何在应用程序打开时更改应用程序设置(设置)?

C# 如何在应用程序打开时更改应用程序设置(设置)?,c#,.net,application-settings,C#,.net,Application Settings,我已经编写了一个类,该类应允许我在应用程序设置中轻松读取和写入值: public static class SettingsManager { public static string ComplexValidationsString { get { return (string)Properties.Settings.Default["ComplexValidations"]; } set

我已经编写了一个类,该类应允许我在应用程序设置中轻松读取和写入值:

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();
            }
        }

问题是该值没有真正保存,我的意思是,当我退出应用程序并再次运行它时,该值没有更改。如何确保保存的值在关闭和再次打开之间保持不变?

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

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

你应该检查一下

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

这可能是真的,这就是罗兰对“应用范围”的理解。保存将以静默方式失败。查看项目属性设置,第3列。

我刚刚测试了一个用户设置,如果您运行此控制台应用两次,它将保持不变:

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();
    }
}

试试看。不需要一分钟。

应该保存,我看不出它有任何问题。无论它更新哪个文件,因此我希望看到ComplexValidationString的值设置为上次打开应用时设置的值。请在Settings.designer.cs中的设置之前添加[全局::System.Configuration.UserScopedSettingAttribute()]或只需在settings1.settings中更改范围