C# Clickonce应用程序未查看应用程序设置
我拥有完全信任,仅联机,单击一次应用程序,该应用程序依赖于App.config-->appSettings集合中的设置 发布后,第一次执行应用程序时,将读取设置,一切正常。如果关闭应用程序并再次运行,则appSettings中的项目将不再存在,并且appSettings.Count等于0 我已将app.config设置为“Content”并设置为“始终复制” 知道是什么导致appSettings中的项目消失了吗?还是一种解决问题的方法C# Clickonce应用程序未查看应用程序设置,c#,.net,clickonce,app-config,C#,.net,Clickonce,App Config,我拥有完全信任,仅联机,单击一次应用程序,该应用程序依赖于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类,这将不是问题,因为默认情况下属性将具有配置的值。只有以不同方式访问设置时,才会出现问题。