Clickonce应用程序不会发送AppSettings
我有一个完全信任,仅在线,单击一次的应用程序,它依赖于App.config – > appSettings集合中的设置。
一旦发布,第一次执行应用程序时,将读取设置并且一切正常。 如果我关闭应用程序并再次运行它,则appSettings中的项目不再存在,appSettings.Count等于0。
我已将app.config设置为“Content”和“始终复制”。
任何想法可能导致appSettings中的项目消失? 或者解决这个问题的方法?
此外,请注意,设置仅被读取,并用于确定应用程序的运行方式。 我们不是试图操纵设置。
我猜你使用的设置有误。
首先,您需要注意应用程序和用户设置之间的区别。 应用程序设置是常量,无法从您的代码更改(例如默认值,连接字符串等)。 用户设置适用于应用程序运行时更改的设置,通常是因为应用程序中存在某种“设置”对话框。
其次,您需要正确访问它们。 人们倾向于(我不知道为什么)使用ConfigurationManager
或其他东西来访问设置。 对于应用程序和用户设置,使用Properties.Settings.Default.SettingName
要容易得多且不易出错。
更改用户设置将如下所示:
Properties.Settings.Default.SettingName = settingValue; Properties.Settings.Default.Save();
对Save
的调用很重要,否则更改将不会Save
。
第三:无需更改app.config
包含在项目中的方式。 默认情况下,它将重命名为applicationname.exe.config
, 除非您另有说明,否则将始终包含在您的输出中。 ClickOnce安装也是如此:默认情况下将包含它。 如果你使用app.config
这个或ClickOnce部署设置,你实际上可能会破坏 ! 将它们恢复为默认值并保持不变。
现在,一个设置将丢失并恢复为默认值的情况是您更新应用程序时。 在这种情况下,您必须从以前安装的版本迁移设置,否则将使用安装中的默认值覆盖用户设置。 您迁移设置的方法是:
在设置设计器中定义名为SettingsUpgradeRequired
的用户SettingsUpgradeRequired
(名称并不重要 – 应该是自我解释),默认值为true
。 然后,当您的应用程序启动时,您执行以下操作:
if (Properties.Settings.Default.SettingsUpgradeRequired) { Properties.Settings.Default.Upgrade(); Properties.Settings.Default.SettingsUpgradeRequired = false; Properties.Settings.Default.Save(); }
这样可确保仅在需要时才进行设置迁移。 SettingsUpgradeRequired
仅在第一次安装时(在这种情况下不执行任何操作)和更新应用程序后才会生效,因为 – 正如我所说 – 默认情况下,ClickOnce安装中的配置将覆盖先前的配置,直到您执行升级。