Clickonce应用程序不会发送AppSettings

时间:2016-06-29 15:06:44

标签: c# .net clickonce app-config

我有完全信任,仅限在线,依赖于App.config中设置的Click-once应用程序 - > appSettings集合。

发布后,第一次执行应用程序时,会读取设置并且一切正常。如果我关闭应用程序并再次运行它,则appSettings中的项目不再存在,并且appSettings.Count等于0.

我已将app.config设置为"内容"和#34;永远复制"。

任何想法可能导致appSettings中的项目消失?或者解决这个问题的方法?

另请注意,只会读取设置,并用于确定应用程序的运行方式。我们不会试图操纵设置。

1 个答案:

答案 0 :(得分:2)

我猜您使用的设置有误。

首先,您需要注意应用程序和用户设置之间的区别。 应用程序设置是常量,无法从代码中更改(例如默认值,连接字符串等)。 用户设置用于在应用程序运行时更改的设置,通常是因为应用程序中存在某种“设置”对话框。

其次,您需要正确访问它们。人们倾向于(并且我不知道为什么)使用诸如ConfigurationManager之类的东西或其他东西来访问设置。使用Properties.Settings.Default.SettingName进行应用程序和用户设置会更容易,也不容易出错。

更改用户设置将如下所示:

Properties.Settings.Default.SettingName = settingValue;
Properties.Settings.Default.Save();

Save的调用很重要,否则更改将不会保留。

第三:无需更改项目中包含app.config的方式。默认情况下,它将重命名为applicationname.exe.config并始终包含在输出中,除非您另有说明。 ClickOnce安装也是如此:默认情况下将包含它。如果你使用app.config的这个或ClickOnce部署设置,你实际上可以破解!将它们恢复为默认值,不管它们。

现在,一个更新应用程序时设置将丢失并恢复为默认值的情况。在这种情况下,您必须从先前安装的版本迁移设置,否则将使用安装中的默认值覆盖用户设置。您迁移设置的方法是:

在设置设计器中定义名为SettingsUpgradeRequired的用户设置(名称并不重要 - 应该是自我解释的),默认值为true。然后,当您的应用程序启动时,您执行以下操作:

if (Properties.Settings.Default.SettingsUpgradeRequired)
{
    Properties.Settings.Default.Upgrade();
    Properties.Settings.Default.SettingsUpgradeRequired = false;
    Properties.Settings.Default.Save();
}

这可确保仅在需要时才进行设置迁移。 SettingsUpgradeRequired 在第一次安装时只会<{em> true(在这种情况下Upgrade什么都不做)并在更新您的应用程序后,因为 - 正如我所说 - 默认情况下,ClickOnce安装中的配置将覆盖先前的配置,直到您执行升级。