我正在开发一个 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.config
和packages.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。
所以,有几个问题:
- 文件中的每个引用
MyProject.csproj
都是从文件夹中添加的packages
,除了这个WindowRuntime
,它来自 Program Files(上面的路径),为什么没有从packages
文件夹中引用?(还尝试将其版本更改为 4.6.0,没有。尝试替换导入路径并将其设置为 packages 文件夹,没有。如果我删除它,甚至不会编译项目)。 - 在那个路径中是
WindowsRuntime.dll
什么Program Files
,.NetCore\v4.5\
但是最新的 .NetCore 是 3.1?它包含一个WindowsRuntime.dll
版本 4.0.0,为什么?
我究竟做错了什么?