C# Can';t更新WPF桌面网桥通用应用程序时升级设置

C# Can';t更新WPF桌面网桥通用应用程序时升级设置,c#,wpf,windows-10-universal,desktop-bridge,C#,Wpf,Windows 10 Universal,Desktop Bridge,我的应用程序是用WPF C#编写的,我直接从Visual Studio使用MSIX应用程序项目将其导出为通用应用程序 我只是无法在更新之间保持设置。我正在main窗口\u Loaded事件中使用以下代码: Settings.Default.Upgrade(); Settings.Default.Save(); Settings.Default.Reload(); 我尝试保持程序集信息版本不变,只是在appx.manifest中增加版本,但没有效果 我注意到,每次应用程序更新时,它都会创建一个新

我的应用程序是用WPF C#编写的,我直接从Visual Studio使用MSIX应用程序项目将其导出为通用应用程序

我只是无法在更新之间保持设置。我正在
main窗口\u Loaded
事件中使用以下代码:

Settings.Default.Upgrade();
Settings.Default.Save();
Settings.Default.Reload();
我尝试保持程序集信息版本不变,只是在appx.manifest中增加版本,但没有效果

我注意到,每次应用程序更新时,它都会创建一个新的唯一命名的父设置文件夹(每次都有一个新的哈希),子文件夹名称是程序集中的版本。文件夹结构如下所示:

App.exe\u Url\u dfvfmfjs1qo33zsag1ay5w1s0rwg0u53/0.2.10.0/user.config

App.exe\u Url\u tazrvujdga5ujjarnahpkosv5zbkgl0/0.2.10.0/user.config

我相信这可能与它不断生成新的哈希值而不是将新版本作为子文件夹有关,这就是为什么升级没有任何作用

到目前为止,我找到的唯一信息是使用
Settings.Default.Upgrade()


当我的通用桌面网桥应用程序更新时,我应该如何将旧版本的设置传输到新版本?

据我研究,这些设置不会使用桌面网桥传输到UWP更新。所以我开始使用UWP的原生
ApplicationData.Settings

作为一种解决方法,我创建了两种方法,使用
LocalSettings
更新新创建的WPF设置,后者与UWP等效,反之亦然。UWP的
LocalSettings
在更新时传输。保存WPF设置时调用
Update()
,应用程序启动时调用
Load()
。它起作用了

下面是代码,到目前为止我发现的唯一警告是,您应该使用基本类型,因为这些方法将无法传输类似于
列表
StringCollection
的内容,因为我正在使用序列化,尽管您也可以随时调整它们:

static class UWPSettings
    {
        public static void Update()
        {
            if (Startup.IsUniversalPlatform)
            {
                foreach (SettingsPropertyValue value in Properties.Settings.Default.PropertyValues)
                {
                    ApplicationData.Current.LocalSettings.Values[value.Name] = value.PropertyValue;
                }
            }
        }

        public static void Load()
        {
            if (Startup.IsUniversalPlatform)
            {
                foreach (var setting in ApplicationData.Current.LocalSettings.Values)
                {
                    foreach (SettingsPropertyValue s in Properties.Settings.Default.PropertyValues)
                    {
                        if (s.Name == setting.Key)
                        {
                            s.PropertyValue = setting.Value;
                        }
                    }
                }

                Properties.Settings.Default.Save();
            }
        }
    }

您可以分享更多关于如何使用Visual Studio制作MSIX包的详细信息吗?我遵循以下步骤:基本上导入一个MSIX应用程序包项目,并通过将其目标设置为我的WPF项目来使用它进行部署和发布。我检查了案例更新,结果是正确的。好吧,我想除了编写自己的传输方法之外,没有更好的方法(复制到UWP设置和从UWP设置复制)或两者都使用。我可以尝试将所有设置迁移到UWP设置,并在ClickOnce部署中使用该设置,但我不确定结果如何(更新ClickOnce应用程序时设置是否会正确升级)。如果我尝试,我将在此处发布更新。