c# - Clickonce 应用程序看不到 AppSettings

标签 c# .net clickonce app-config

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

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

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

知道什么可能导致 appSettings 中的项目消失吗?或者有办法解决这个问题吗?

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

最佳答案

我猜您使用了错误的设置。

首先,您需要注意应用程序和用户设置之间的差异。 应用程序设置是不变的,无法通过代码进行更改(例如默认值、连接字符串等)。 用户设置是应用程序运行时更改的设置,通常是因为应用程序中存在某种设置对话框。

其次,您需要正确访问它们。人们倾向于(我不知道为什么)使用 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 在首次安装时为true(在这种情况下,Upgrade 不执行任何操作)以及更新后您的应用程序,因为 - 正如我所说 - 默认情况下,ClickOnce 安装中的配置将覆盖以前的配置,直到您执行升级。

关于c# - Clickonce 应用程序看不到 AppSettings,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38103489/

相关文章:

c# - CLR 2.0 与 4.0 的性能对比?

c# - 如何在 C# 中生成 8 字节的 GUID 值?

javascript - 检测边缘 ://flags/#edge-click-once enabled in Chromium Edge

vb.net - 无法获取命名空间 System.Deployment.Application

c# - 在 LINQ to SQL 中查找或创建对象的通用方法?

c# - C# 项目的设置向导

c# - 如何从类的实例访问嵌套类?

c# - 为什么返回的 DataTable 在 FileHelpers 中有只读列

wpf - Prism 并单击一次

c# - 参数 1 : cannot convert from 'Moq.Mock<System.Data.Entity.DbContext>' to 'System.Data.Entity.DbContext'