为什么我的应用程序设置没有得到保留?

问题描述 投票:0回答:6

所以我有一些属于 user 范围的设置,但由于某种原因,它们没有保存到 .exe.config 文件中。我执行以下操作:

Properties.Settings.Default.Email = "[email protected]";
Properties.Settings.Default.Save();

但是我查看了 debug 文件夹中的设置文件,它仍然是我在 Visual Studio 中设置的默认值。我这样做错了吗?

c# .net application-settings
6个回答
26
投票

用户设置特定于用户,因此它们不会保存回系统范围内的 .exe.config 文件。

来自

LocalSettingsProvider
的文档:

应用程序范围的设置和 默认用户范围设置是 存储在名为 application.exe.config,这是 在同一目录中创建 可执行文件。应用 配置设置是只读的。 特定的用户数据存储在文件中 命名为

username.config
,存储在 用户的主目录。

因此,对于在调试器下从 VS 运行的 UserSettingsTest 应用程序(因此是 vshost 位),我最终得到的路径为:

C:\Users\Jon\AppData\Local\UserSettingsTest
  \UserSettingsTest.vshost.e_Url_pdqoppugkz1vaawbhwkkcu5ibxpi2fgu
  \1.0.0.0\user.config

21
投票

如果您将程序集信息设置为自动生成任何版本号(1.0.*),那么每次调试应用程序时版本号都会不同,因此每次都会创建一个新文件。

如果是这种情况,您将需要对设置文件执行升级:

Properties.Settings.Default.Upgrade()

您还可以将

NeedsUpgrading
默认设置为
true
,并在执行升级后将其设置为 false,这样每次启动应用程序时不更改版本号的最终用户就不会一直升级


2
投票

所有用户范围设置都保存在应用程序数据下的文件夹中,该文件夹指示应用程序的版本和名称。

您可以通过单击“应用程序设置”对话框中的“同步”来查看这些文件夹。

一般在 Vista 中:

  • c:\users[当前用户]\AppData\Local[公司名称][应用程序名称]版本
  • c:\users[当前用户]\AppData\Roaming[公司名称][应用程序名称]版本

这样做是因为设置与当前用户UAC相关。在 Vista 中,您甚至可以看到应用程序范围的设置也没有存储在配置文件中。

[CompanyName] 和 [ProductName] 来自您的程序集信息设置。


0
投票

我发现,当运行调试版本时,它总是会重建并自动递增版本。新版本预计 user.config 文件位于 C:\Users\Adrian\AppData\Local\Company\Project\Version 中。由于这是新版本,该文件不存在,我再次获得默认值。您可以通过更改设置、保存并再次手动运行 exe(在 bin\debug\... 文件夹中)来检查这一点。如果这是您的问题,那么它会记住您的更改。

要解决此问题,您可以使用

Settings.Default.Upgrade()
方法。这样做的潜在问题是,如果您每次都运行它,它总是会用旧的设置替换您最近的设置。

解决方案 使用设置编辑器添加新设置:

SettingsHaveBeenUpgraded : bool : User : false

在Program.cs Main()中添加:

    if (!Settings.Default.SettingsHaveBeenUpgraded)
    {
        Settings.Default.Upgrade();
        Settings.Default.SettingsHaveBeenUpgraded = true;
    }

这将确保升级仅发生一次。


0
投票

我使用一些配置文件来解决这个问题:

    private static void ReadSettings()
    {
        if (File.Exists("settings.cfg"))
            using (StreamReader sr = new StreamReader("settings.cfg"))
            {
                LaatsteSpecifiekeFoutMelding = sr.ReadLine();
                LaatsteAlgemeneFoutMelding = sr.ReadLine();
            }
    }
    private static void SaveSettings()
    {
        using (StreamWriter sw = new StreamWriter("settings.cfg",false))
        {
            sw.WriteLine(LaatsteSpecifiekeFoutMelding);
            sw.WriteLine(LaatsteAlgemeneFoutMelding);
        }
    }

-1
投票

“用户”定义的设置与“应用程序”定义的设置一起记录在 app.config 中。但实际上,以“用户”命名的设置是用词不当,而且相当具有误导性。它们应该称为“默认用户”设置。

当新用户访问该应用程序时,他们将默认分配“用户”设置。

如果用户设置与 app.config 文件中的“默认用户”设置不同,则仅将其保存到实际用户的 user.config 设置文件中。

© www.soinside.com 2019 - 2024. All rights reserved.