为啥没有加载持久的用户设置?
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 调试应用程序时,每次启动新会话时都使用默认数据。
如果您在已安装的版本中看到这一点,那么我猜您实际上并没有使用字符串值,而您认为是。
【讨论】:
啊,就是这样,干杯。以上是关于为啥没有加载持久的用户设置?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的链接器脚本中的 ENTRY() 没有设置为 . = <地址> 部分?