所以我有一些用户范围的设置,但由于某种原因,它们没有保存到 .exe.config 文件中。我执行以下操作:
Properties.Settings.Default.Email = "new@value.com";
Properties.Settings.Default.Save();
然而,我查看了调试文件夹中的设置文件,它仍然是我在 Visual Studio 中设置的默认设置。我做错了吗?
所以我有一些用户范围的设置,但由于某种原因,它们没有保存到 .exe.config 文件中。我执行以下操作:
Properties.Settings.Default.Email = "new@value.com";
Properties.Settings.Default.Save();
然而,我查看了调试文件夹中的设置文件,它仍然是我在 Visual Studio 中设置的默认设置。我做错了吗?
用户设置是特定于用户的,因此它们不会被保存回系统范围的 .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
如果您将程序集信息设置为自动生成任何版本号 (1.0.*),那么每次调试应用程序时版本号都会不同,因此每次都会创建一个新文件。
如果是这种情况,您将需要对设置文件执行升级:
Properties.Settings.Default.Upgrade()
您也可以设置为NeedsUpgrading
默认true
设置,并在执行升级后将其设置为 false,以便每次启动应用程序时不更改版本号的最终用户不会一直在升级
所有用户范围设置都保存在应用程序数据下的文件夹中,该文件夹指示应用程序的版本和名称。
您可以通过单击“应用程序设置”对话框中的“同步”来查看这些文件夹。
通常在 Vista 中:
这样做是因为设置与当前用户和UAC相关。在 Vista 中,您甚至可以看到应用程序范围的设置并未存储在配置文件中。
[CompanyName] 和 [ProductName] 来自您的装配信息设置。
“用户”定义的设置与“应用程序”定义的设置一起记录在 app.config 中。然而,在现实中,“用户”命名设置是用词不当且颇具误导性。它们应该被称为“默认用户”设置。
当新用户访问应用程序时,默认情况下会为他们分配“用户”设置。
如果用户设置与位于 app.config 文件中的“默认用户”设置不同,则仅将用户设置保存到实际用户的 user.config 设置文件中。