所以我有一些属于 user 范围的设置,但由于某种原因,它们没有保存到 .exe.config 文件中。我执行以下操作:
Properties.Settings.Default.Email = "[email protected]";
Properties.Settings.Default.Save();
但是我查看了 debug 文件夹中的设置文件,它仍然是我在 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] 来自您的程序集信息设置。
我发现,当运行调试版本时,它总是会重建并自动递增版本。新版本预计 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;
}
这将确保升级仅发生一次。
我使用一些配置文件来解决这个问题:
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);
}
}
“用户”定义的设置与“应用程序”定义的设置一起记录在 app.config 中。但实际上,以“用户”命名的设置是用词不当,而且相当具有误导性。它们应该称为“默认用户”设置。
当新用户访问该应用程序时,他们将默认分配“用户”设置。
如果用户设置与 app.config 文件中的“默认用户”设置不同,则仅将其保存到实际用户的 user.config 设置文件中。