关于c#:Clickonce应用程序未发现AppSettings

 2020-03-26 

Clickonce application not seeting AppSettings

我有一个完全信任的,仅在线单击一次的应用程序,该应用程序依赖于App.config-> appSettings集合中的设置。

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

我已将app.config设置为"内容"并设置为"始终复制"。

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

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


我猜您使用的设置错误。

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

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

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

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

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

第三:无需更改项目中包含app.config的方式。默认情况下,它将重命名为applicationname.exe.config,除非您另有说明,否则它将始终包含在您的输出中。 ClickOnce安装也是如此:默认情况下将包括它。如果您玩此游戏或app.config的ClickOnce部署设置,实际上可能会破坏事情!将它们还原为默认值,然后不理会它们。

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

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

1
2
3
4
5
6
if (Properties.Settings.Default.SettingsUpgradeRequired)
{
    Properties.Settings.Default.Upgrade();
    Properties.Settings.Default.SettingsUpgradeRequired = false;
    Properties.Settings.Default.Save();
}

这样可以确保仅在需要时才进行设置的迁移。 SettingsUpgradeRequired仅在首次安装时为true(在这种情况下,Upgrade不执行任何操作)并且在更新应用程序之后,因为-正如我所说-默认情况下,ClickOnce安装中的配置将覆盖以前的配置直到执行升级。