为啥没有加载持久的用户设置?

Posted

技术标签:

【中文标题】为啥没有加载持久的用户设置?【英文标题】:Why are persisted user settings not loaded?为什么没有加载持久的用户设置? 【发布时间】:2011-01-13 04:41:25 【问题描述】:

我有一个 Windows 应用程序,它使用一个程序集,该程序集在默认应用程序设置中存储了一些配置设置。

设置可以在运行时更改并因此保持:

Properties.Settings.Default.SelectedCOMPort = options.SelectedCOMPort;
Properties.Settings.Default.Save();

设置已正确保存,我通过查看保存在用户应用程序目录中的 user.config 文件来确认这一点,例如

C:\Documents and Settings\e399536\Local Settings\Application Data\MyCompany\MyTool

但是,当工具关闭然后重新启动时,所有设置都将使用其默认值加载。

在应用程序运行后检查 user.config 文件可确认设置仍然保存。

设置是这样加载的:

options.SelectedCOMPort = Properties.Settings.Default.SelectedCOMPort;

为什么使用默认设置而不是保存的设置?

我错过了什么吗??

@Tenaciouslmpy 设置在程序集的构造过程中加载,它本身是在主程序集的表单加载事件中加载的。

@奥斯汀 这是我在 Visual Studio 中调试的独立应用程序。

【问题讨论】:

你能把代码贴在你加载字符串设置的地方吗? 什么时候加载设置?表单生命周期中有哪些事件? 这是来自独立安装还是从 IDE 运行? 【参考方案1】:

如果您在运行之间重新编译应用程序,请注意,它会认为是应用程序的新版本,并且不会自动加载每个用户的设置。在这种情况下,您需要调用 Settings.Default.Upgrade。

仅在需要时执行此操作的一种方法是将 NeedsUpgrade 设置(值为 True)添加到应用程序的默认每用户设置。在应用启动时,检查 NeedsUpgrade 是否为真。如果是,请调用 Upgrade,将 NeedsUpgrade 设置为 False,然后保存设置。下次应用版本更改时,NeedsUpgrade 将重置为 True,您将自动调用 Upgrade 以再次引入任何现有用户设置。

确保您在调用升级之后设置 NeedsUpgrade,否则在升级设置时它会被清除。

if (Settings.Default.NeedsUpgrade)

    Settings.Default.Upgrade();
    Settings.Default.NeedsUpgrade = false;
    Settings.Default.Save();

【讨论】:

我没有重新编译,但是我在 IDE 中进行调试,它似乎做同样的事情。无论如何,Upgrade() 技巧已经解决了这个问题。干杯。 我在 IDE (VS.2015) 上的调试会话中遇到了这个问题。设置已恢复为默认值。我实现了 NeedUpgrade 提示,但问题仍然存在。 我刚刚在 VS 2015 社区中对其进行了测试,它仍然对我有用。请注意,这些天的行为似乎更聪明了一些。除非程序集版本更改,否则它不会将 NeedUpgrade 重置为 true;仅仅重建应用程序不会再这样做了。【参考方案2】:

这听起来就像是在从 Visual Studio 调试应用程序时,每次启动新会话时都使用默认数据。

如果您在已安装的版本中看到这一点,那么我猜您实际上并没有使用字符串值,而您认为是。

【讨论】:

啊,就是这样,干杯。

以上是关于为啥没有加载持久的用户设置?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我的 cookie 设置没有被应用?

为啥我的链接器脚本中的 ENTRY() 没有设置为 . = <地址> 部分?

为啥 BotUserData 在我的 Bot Framework 机器人中不能持久化和可检索?

为啥要设置eclipse workspace?

为啥范围样式没有加载到 nuxt 页面中?

为啥我的 Django 管理站点没有样式/CSS 加载?