【问题标题】:How to use the correct WindowsRuntime.dll in WPF for XAML Islands?如何在 WPF 中为 XAML 岛使用正确的 WindowsRuntime.dll?
【发布时间】:2020-11-03 11:18:58
【问题描述】:

我正在开发 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 文件 - 确切的行在下面发布)并且我还在 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 文件夹添加的,除了来自 Program Files(上面的路径)的 WindowRuntime,为什么没有从 packages 文件夹引用? (还尝试将其版本更改为 4.6.0,没有。尝试替换导入路径并将其设置为 packages 文件夹,没有。如果我删除它,甚至不会编译项目)。
  2. Program Files 中的WindowsRuntime.dll 路径中,.NetCore\v4.5\ 是什么,但最新的.NetCore 是3.1?它包含一个WindowsRuntime.dll 4.0.0 版本,为什么?

我做错了什么?

【问题讨论】:

标签: c# .net wpf xaml-islands


【解决方案1】:

来自docs

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

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

【讨论】:

    猜你喜欢
    • 2011-03-31
    • 2021-05-19
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-29
    相关资源
    最近更新 更多