c# - 不要用 clickonce 覆盖 settings.settings 文件

标签 c# clickonce app-config

起初,我在 app.config 文件中的 appSettings 下存储了一些用户定义的设置。 这些是用户可以在运行时更改的属性。 我遇到的第一个问题是,当我使用 ClickOnce 部署我的应用程序时,它会覆盖 app.config 文件并且用户丢失了他的个人设置。

然后我将属性移动到 settings.settings 文件(= app.config 中的 usersettings 部分),因为我在 Internet 上发现使用 ClickOnce 部署时该部分不会被覆盖。不,它确实.. Settings.Settings 属性是:

  • 构建操作 = 内容
  • 复制到 = 不复制

那么我怎样才能做到不覆盖我用户的个人设置,无论是在 app.config 文件还是 settings.settings 文件中。还是有其他方法,我做错了吗?

谢谢!

最佳答案

在使用 ClickOnce 部署应用程序的新版本时,此方法会复制先前安装的设置。 因此,用户所做的任何用户定义的设置都将被复制,因此在更新后可用。我对此进行了测试,它对我有用。

public static void UpgradeUserSettings()
{
  if (Settings.Default.upgradeRequired)
  {
    Settings.Default.Upgrade();
    Settings.Default.upgradeRequired = false;
    Settings.Default.Save();
  }
} 

ApplicationSettingsBase.Upgrade Method MSDN

other question on StackOverflow

关于c# - 不要用 clickonce 覆盖 settings.settings 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14400943/

相关文章:

c# 连接字符串和连接 app.config

.net - 如何从 App.Config 文件设置 CultureInfo.CurrentCulture?

c# - 为什么 System.Type.IsPublic 返回为 false?

c# - 将空值插入 SQL Server 中的 int 列

.NET ClickOnce 没有安装必备文件?

.net - 转换为 .NET 4 后 ClickOnce 升级失败

c# - 如何在 c# 中通过客户端识别我的服务器名称以进行服务器身份验证

c# - 我如何使用 linq 将字符串日期时间解析为实际日期时间?

ClickOnce 应用程序和 Windows 防火墙

c# - .net 配置文件 AppSettings : NameValueCollection vs. KeyValueConfigurationCollection