基本上,问题是每次程序集版本更改(即用户安装应用程序的新版本)时,他们的所有设置都会重置为默认设置(或者更准确地说,在一个文件夹中创建一个新的user.config文件,该文件夹的名称为不同的版本号)

升级版本时如何保持相同的设置,因为似乎不鼓励使用ini文件或注册表?

当我们使用Clickonce时,它似乎能够处理这个问题,所以它似乎应该能够做到,但我不确定如何做到.

推荐答案

ApplicationSettingsBase有一个method called Upgrade,可以从以前的版本迁移所有设置.

为了在发布应用程序的新版本时运行合并,可以在设置文件中定义一个默认为true的布尔标志.请说出UpgradeRequired或类似的名字.

然后,在应用程序启动时判断是否设置了标志,如果设置了,则呼叫Upgrade method,将标志设置为FALSE并保存您的配置.

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

MSDN阅读更多关于升级方法的信息.如果您需要进行一些自定义合并,GetPreviousVersion可能也值得一看.

.net相关问答推荐

是否存在指定的(子)索引分隔符?

关于在 .NET 中干净地终止线程的问题

如何使用 Moq 为不同的参数设置两次方法

Gacutil.exe 成功添加程序集,但在资源管理器中无法查看程序集.为什么?

无法加载文件或程序集 Microsoft.Extensions.DependencyInjection.Abstractions,版本 = 1.1.0.0

整个命名空间的SuppressMessage

找不到 Microsoft.Office.Interop Visual Studio

如何在 C# 7 中返回多个值?

何时在 C#/.NET 中使用指针?

如何将时间设置为当天的午夜?

为什么使用 ImmutableList 而不是 ReadOnlyCollection?

获取 .NET 程序集的 AssemblyInformationalVersion 值?

从流中获取 TextReader?

确定使用 ContextMenuStrip 的控件

使用 lambda 表达式代替 IComparer 参数

如何使用 DateTime 指定一天中的最晚时间

具有不同身份验证标头的 HttpClient 单个实例

如何为我的 C# 应用程序创建产品密钥?

在 WPF 中设置 Tab 键顺序

如何从 webclient 获取状态码?