【问题标题】:Clickonce application not seeting AppSettingsClickonce 应用程序没有看到 AppSettings
【发布时间】:2016-11-01 09:23:22
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: c# .net clickonce app-config


    【解决方案1】:

    我猜你使用的设置有误。

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

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

    更改用户设置如下所示:

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

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

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

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

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

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

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

    【讨论】:

    • 感谢您的回复,我同意更改设置。实际上,我们并没有尝试更改任何设置。我的问题是设置不在那里阅读。该应用程序根据读取的设置运行,但是由于设置在第一次运行后消失,这导致我的应用程序出现问题。
    • 如果您按照我的建议使用 Settings 类,这将不是问题,因为默认情况下属性将具有配置的值。只有当您以不同的方式访问设置时,您才会遇到问题。
    猜你喜欢
    • 1970-01-01
    • 2016-06-13
    • 2012-02-03
    • 1970-01-01
    • 1970-01-01
    • 2017-09-18
    • 1970-01-01
    • 1970-01-01
    • 2011-01-01
    相关资源
    最近更新 更多