我有一个Windows应用程序,它使用一个程序集在默认的应用程序设置中存储一些configuration设置。
这些设置可以在运行时更改并保持如下:
Properties.Settings.Default.SelectedCOMPort = options.SelectedCOMPort; Properties.Settings.Default.Save();
设置保存正确,我通过查看保存在用户应用程序目录中的user.config文件来确认
C:\Documents and Settings\e399536\Local Settings\Application Data\MyCompany\MyTool
但是,当工具closures,然后再次启动时,所有设置都将使用其默认值加载。
一旦应用程序运行,检查user.config文件确认设置仍然保存。
这些设置是这样加载的:
options.SelectedCOMPort = Properties.Settings.Default.SelectedCOMPort;
为什么使用默认设置而不是保存的?
我错过了什么?
@ Tenaciouslmpy设置在程序集的构造函数中加载,它本身是在主程序集的表单加载事件中加载的。
@ Austin这是我在Visual Studio中debugging的独立应用程序。
如果您正在重新编译运行之间的应用程序,请注意,它会考虑应用程序的新版本,并不会自动加载每个用户的设置。 在这种情况下,您需要调用Settings.Default.Upgrade。
一种只在需要的时候才能做到这一点的方法是将NeedsUpgrade设置(值为True)添加到应用程序的默认每个用户设置中。 在应用程序启动时,检查NeedsUpgrade是否为真。 如果是,请调用升级,将NeedsUpgrade设置为False,然后保存设置。 下次应用程序版本更改时,NeedsUpgrade将重置为True,您将自动调用Upgrade以再次引入任何现有的用户设置。
请确保您在升级后设置了NeedsUpgrade,否则在升级设置时会消失。
if (Settings.Default.NeedsUpgrade) { Settings.Default.Upgrade(); Settings.Default.NeedsUpgrade = false; Settings.Default.Save(); }
这听起来像是你从Visual Studio调试应用程序,当你每次开始一个新的会话,你开始使用默认的数据。
如果你看到这个安装版本,那么我猜你实际上并没有使用字符串值。