1

我正在开发一个 WPF 应用程序,我想添加XAML Islands以便能够在我的应用程序中使用 Windows 10 控件。按照教程,我Microsoft.Toolkit.Wpf.UI.XamlHost通过 Nuget 包管理器添加了项目。它还安装了它的依赖项,例如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文件 - 确切的行发布在下面),并且我还通过MyProject.csproj以下方式在文件中默认添加了 WindowsRuntime.dll:

<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. 在那个路径中是WindowsRuntime.dll什么Program Files.NetCore\v4.5\但是最新的 .NetCore 是 3.1?它包含一个WindowsRuntime.dll版本 4.0.0,为什么?

我究竟做错了什么?

4

1 回答 1

1

文档

仅在面向.NET Core 3.x的 WPF 和 Windows 窗体应用程序中支持使用 XAML 岛来托管 WinRT XAML 控件。面向 .NET Framework 的应用程序支持XAML 岛。

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

于 2020-11-03T14:35:08.580 回答