因此,我有一些属于user范围的设置,但由于某种原因,它们没有保存到.exe.config文件中。
Properties.Settings.Default.Email = "new@value.com"; Properties.Settings.Default.Save();
然而我查看debug文件夹中的设置文件,它仍然是我在visual studio中设置的默认值。我这样做错了吗?
yv5phkfx1#
用户设置是特定于用户的,因此它们不会被保存回. exe.config文件,该文件是系统范围的。来自LocalSettingsProvider的文档:应用程序范围的设定和预设使用者范围的设定会储存在名为application.exe.config的档案中,该档案与可可执行建立在相同的目录中。应用程序组态设定是只读的。特定的使用者数据会储存在名为username.config的档案中,该档案储存在使用者的主目录下。因此,对于UserSettingsTest应用程序,只需在调试器下从VS运行(因此有vshost位),我最终得到的路径为:
LocalSettingsProvider
username.config
C:\Users\Jon\AppData\Local\UserSettingsTest \UserSettingsTest.vshost.e_Url_pdqoppugkz1vaawbhwkkcu5ibxpi2fgu \1.0.0.0\user.config
wj8zmpe12#
如果您将程序集信息设置为自动生成任何版本号(1.0.*),则每次调试应用时,版本号都将不同,因此每次都将创建一个新文件。如果是这种情况,您将需要对设置文件执行升级:
Properties.Settings.Default.Upgrade()
您还可以将NeedsUpgrading的设置默认设置为true,并在执行升级后将其设置为false,以便每次启动应用程序时不更改版本号的最终用户不会一直升级
NeedsUpgrading
true
mftmpeh83#
所有用户范围设置都保存在应用程序数据下,位于一个文件夹中,该文件夹指示应用程序的版本和名称。您可以通过在“应用程序设置”对话框中单击“同步”来查看这些文件夹。通常在Vista中:
这样做是因为设置与当前用户和UAC有关。在Vista中,您还可以看到甚至应用程序范围的设置也没有存储在配置文件中。[CompanyName]和[ProductName]来自您的程序集信息设置。
bq3bfh9z4#
我发现当运行调试版本时,它总是重建并自动递增版本。新版本希望用户.config文件在C:\Users\Adrian\AppData\Local\Company\Project\Version中。由于这是一个新版本,该文件不存在,我又得到了默认值。您可以通过更改设置、保存,然后再次手动运行exe(在bin\debug...文件夹中)来检查这一点。如果这是您的问题,那么它会记住您的更改。若要修正这个问题,您可以使用Settings.Default.Upgrade()方法。这个方法的潜在问题是,如果您每次执行它,它总是会以旧的设定取代您最近的设定。解决方案使用设置编辑器添加新设置:
Settings.Default.Upgrade()
SettingsHaveBeenUpgraded : bool : User : false
在Program.cs Main()中,加入:
if (!Settings.Default.SettingsHaveBeenUpgraded) { Settings.Default.Upgrade(); Settings.Default.SettingsHaveBeenUpgraded = true; }
这将确保升级仅发生一次。
vmpqdwk35#
“用户”定义的设置与“应用程序”定义的设置沿着记录在app.config中。然而,实际上,“用户”命名的设置是一个用词不当且容易误导。它们应该被称为“默认用户”设置。当新用户访问应用程序时,默认情况下,将为他们分配“用户”设置。如果用户设置与位于app.config文件中的“默认用户”设置不同,则仅将用户设置保存到实际用户的user.config设置文件中。
5条答案
按热度按时间yv5phkfx1#
用户设置是特定于用户的,因此它们不会被保存回. exe.config文件,该文件是系统范围的。
来自
LocalSettingsProvider
的文档:应用程序范围的设定和预设使用者范围的设定会储存在名为application.exe.config的档案中,该档案与可可执行建立在相同的目录中。应用程序组态设定是只读的。特定的使用者数据会储存在名为
username.config
的档案中,该档案储存在使用者的主目录下。因此,对于UserSettingsTest应用程序,只需在调试器下从VS运行(因此有vshost位),我最终得到的路径为:
wj8zmpe12#
如果您将程序集信息设置为自动生成任何版本号(1.0.*),则每次调试应用时,版本号都将不同,因此每次都将创建一个新文件。
如果是这种情况,您将需要对设置文件执行升级:
您还可以将
NeedsUpgrading
的设置默认设置为true
,并在执行升级后将其设置为false,以便每次启动应用程序时不更改版本号的最终用户不会一直升级mftmpeh83#
所有用户范围设置都保存在应用程序数据下,位于一个文件夹中,该文件夹指示应用程序的版本和名称。
您可以通过在“应用程序设置”对话框中单击“同步”来查看这些文件夹。
通常在Vista中:
这样做是因为设置与当前用户和UAC有关。在Vista中,您还可以看到甚至应用程序范围的设置也没有存储在配置文件中。
[CompanyName]和[ProductName]来自您的程序集信息设置。
bq3bfh9z4#
我发现当运行调试版本时,它总是重建并自动递增版本。新版本希望用户.config文件在C:\Users\Adrian\AppData\Local\Company\Project\Version中。由于这是一个新版本,该文件不存在,我又得到了默认值。您可以通过更改设置、保存,然后再次手动运行exe(在bin\debug...文件夹中)来检查这一点。如果这是您的问题,那么它会记住您的更改。
若要修正这个问题,您可以使用
Settings.Default.Upgrade()
方法。这个方法的潜在问题是,如果您每次执行它,它总是会以旧的设定取代您最近的设定。解决方案使用设置编辑器添加新设置:
在Program.cs Main()中,加入:
这将确保升级仅发生一次。
vmpqdwk35#
“用户”定义的设置与“应用程序”定义的设置沿着记录在app.config中。然而,实际上,“用户”命名的设置是一个用词不当且容易误导。它们应该被称为“默认用户”设置。
当新用户访问应用程序时,默认情况下,将为他们分配“用户”设置。
如果用户设置与位于app.config文件中的“默认用户”设置不同,则仅将用户设置保存到实际用户的user.config设置文件中。