为什么我的应用程序设置没有持久化?

时间:2009-06-28 06:58:45

标签: c# .net application-settings

所以我有一些用户范围的设置,但由于某种原因,它们没有保存到.exe.config文件中。我做了以下事情:

Properties.Settings.Default.Email = "new@value.com";
Properties.Settings.Default.Save();

然而,我查看调试文件夹中的设置文件,它仍然是我在visual studio中设置的默认设置。我做错了吗?

4 个答案:

答案 0 :(得分:18)

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

来自LocalSettingsProvider的文档:

  

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

因此,对于UserSettingsTest应用程序,只需在调试器下运行VS(因此是vshost位),我最终会得到一条路径:

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

答案 1 :(得分:18)

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

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

Properties.Settings.Default.Upgrade()

默认情况下,您还可以将NeedsUpgrading设置为true,并在执行升级后将其设置为false,以便每次启动应用时不更改版本号的最终用户不会一直在升级

答案 2 :(得分:0)

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

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

在Vista中一般:

  • C:\用户[currentuser] \应用程序数据\本地[公司名称] [AppName的] \版本
  • C:\用户[currentuser] \应用程序数据\漫游[公司名称] [AppName的] \版本

由于设置与当前用户 UAC 相关,因此请执行此操作。在Vista中,您甚至可以看到应用程序范围的设置未存储在配置文件中。

[CompanyName]和[ProductName]来自您的装配信息设置。

答案 3 :(得分:-1)

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

当新用户访问应用程序时,默认情况下会为其分配“用户”设置。

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