如何在 XAML 群岛的 WPF 中使用正确的 WindowsRuntime.dll?

How to use the correct WindowsRuntime.dll in WPF for XAML Islands?

我正在开发一个 WPF 应用程序,我想添加 XAML Islands 以便能够在我的应用程序中使用 windows 10 个控件。 按照 this 教程,我通过 Nuget 包管理器添加了 Microsoft.Toolkit.Wpf.UI.XamlHost 项目。它还安装了它的依赖项,例如 Microsoft.Windows.SDK.Contracts (10.0.18362.2005),它依赖于 System.Runtime.WindowsRuntime >= 4.6.0。当我运行项目时,出现如下编译错误:

Multiple assemblies with equivalent identity have been imported: 
'C:\Users\*[path to my project]*\packages\System.Runtime.WindowsRuntime.4.6.0\ref\netstandard2.0\System.Runtime.WindowsRuntime.dll'
and 
'C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.WindowsRuntime.dll'.
Remove one of the duplicate references.

清除错误消息,XamlHost 安装了它的依赖项(它修改了 app.configpackages.config 文件 - 确切的行在下面发布)并且我还添加了 WindowsRuntime.dll MyProject.csproj 文件中的默认方式如下:

<Reference Include="System.Runtime.WindowsRuntime, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
    <SpecificVersion>False</SpecificVersion>
    <HintPath>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETCore\v4.5\System.Runtime.WindowsRuntime.dll</HintPath>
</Reference>

所以我保留了当前随 XamlHost 安装的依赖项,并删除了默认的依赖项,即我在上面发布的内容。然后,当我编译时它抛出了一个错误弹出窗口:This application has failed to start because the application configuration is incorrect. 我还尝试删除另一个导入,它是在我安装 XamlHost 项目时添加的:

因此,从 app.config 中删除以下行:

<dependentAssembly>
    <assemblyIdentity name="System.Runtime.WindowsRuntime" publicKeyToken="b77a5c561934e089" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-4.6.0.0" newVersion="4.6.0.0" />
</dependentAssembly>

来自packages.config

<package id="System.Runtime.WindowsRuntime" version="4.6.0" targetFramework="net471" />

但它抛出相同的弹出窗口,项目配置不正确。

还更新到最新的 Visual studio(我使用的是 vs2019 社区),更新到最新的 windows SDK,以及最新的 .NET Framework。

所以,有几个问题:

  1. MyProject.csproj 文件中的每个引用都是从 packages 文件夹添加的,除了这个 WindowRuntime,它来自 Program Files(上面的路径),为什么没有从packages文件夹? (也尝试将其版本更改为 4.6.0,没有。尝试替换导入路径并将其设置为 packages 文件夹,没有。如果我删除它,甚至不编译项目)。
  2. Program FilesWindowsRuntime.dll 的路径中 .NetCore\v4.5\ 是什么,但是最新的 .NetCore 是 3.1?而且它包含一个WindowsRuntime.dll版本4.0.0,为什么?

我做错了什么?

来自docs

Using XAML Islands to host WinRT XAML controls is supported only in WPF and Windows Forms apps that target .NET Core 3.x. XAML Islands are not supported in apps that target the .NET Framework.

从项目文件的格式以及您仍在使用 packages.config 文件这一事实来看,您似乎是针对 .NET Framework。这是不支持的。