C# Clickonce应用程序未查看应用程序设置

C# Clickonce应用程序未查看应用程序设置,c#,.net,clickonce,app-config,C#,.net,Clickonce,App Config,我拥有完全信任,仅联机,单击一次应用程序,该应用程序依赖于App.config-->appSettings集合中的设置 发布后,第一次执行应用程序时,将读取设置,一切正常。如果关闭应用程序并再次运行,则appSettings中的项目将不再存在,并且appSettings.Count等于0 我已将app.config设置为“Content”并设置为“始终复制” 知道是什么导致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
非常重要,否则更改将不会持久化

第三:无需改变
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
仅在第一次安装(在这种情况下,
Upgrade
什么都不做)和应用程序更新后才会成为
true
,因为正如我所说的,默认情况下,ClickOnce安装的配置将覆盖以前的配置,直到您执行升级

感谢您的回复,我同意更改设置。实际上,我们并没有试图改变任何设置。我的问题是,这些设置不是用来读取的。应用程序基于读取的设置运行,但是,由于第一次运行后设置消失,这会导致我的应用程序出现问题。如果您按照我的建议使用settings类,这将不是问题,因为默认情况下属性将具有配置的值。只有以不同方式访问设置时,才会出现问题。