我有一个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 在程序集的构造函数期间加载这些设置,该构造函数本身在主程序集的表单load事件中加载。
@奥斯汀 这是我在Visual Studio中调试的独立应用程序。
答案 0 :(得分:11)
如果您要在运行之间重新编译应用程序,请注意它会考虑新版本的应用程序并且不会自动加载每个用户的设置。在这种情况下,您需要调用Settings.Default.Upgrade。
仅在需要时才执行此操作的一种方法是将NeedsUpgrade设置(值True)添加到应用程序的默认每用户设置。在应用启动时,检查NeedsUpgrade是否为true。如果是,请调用Upgrade,将NeedsUpgrade设置为False,然后保存设置。下次应用版本更改时,NeedsUpgrade将重置为True,您将自动调用Upgrade以再次引入任何现有用户设置。
确保您在调用升级后设置NeedsUpgrade ,否则在升级设置时它将被清除。
if (Settings.Default.NeedsUpgrade)
{
Settings.Default.Upgrade();
Settings.Default.NeedsUpgrade = false;
Settings.Default.Save();
}
答案 1 :(得分:2)
这听起来就像您每次启动新会话时从Visual Studio调试应用程序时都会使用默认数据。
如果您在安装的版本中看到这一点,那么我猜您实际上并没有使用字符串值。