【问题标题】:UWP at design-time: "Could not load file or assembly" for various NuGet packages设计时的 UWP:各种 NuGet 包的“无法加载文件或程序集”
【发布时间】:2017-09-08 03:30:39
【问题描述】:

我正在使用 Visual Studio 2017 v15.3.3。我的 UWP 项目针对的是 Windows Creators Update 15063,我的 Nuget 包如下:

我的解决方案构建没有错误,并且运行良好,但是由于我的代码隐藏和/或 ViewModel 代码正在引用 NuGet 包这一事实,我在 UWP 应用项目的设计时遇到了错误。这就是我所看到的:

这个问题不是 System.Reactive 独有的。我在 Newtonsoft.Json v10.0.3 包中遇到了一个不同(但看似相关)的错误:

Could not load file or assembly 'Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The bound assembly has a version that is lower than that of the request. (Exception from HRESULT: 0x80132000)

有趣的是,将 System.Reactive 降级到 v3.0.0 并不能解决问题:错误声称系统找不到 v3.0.0 程序集。

最新 AutoMapper 包 (v6.1.1) 的类似问题

重现问题:

  1. 创建一个新的 UWP 项目(目标随便,似乎无所谓)
  2. 创建一个新的UserControl
  3. 在此 UserControl 的构造函数中,添加一些引用任何这些包的代码,例如,var s = new Subject<int>(); 并添加 using System.Reactive.Subjects;
  4. 将该用户控件添加为 MainPage.xaml 中的 XAML 元素
  5. 编译并记下错误

...或查看此示例here

令人沮丧的是,几周前在 Visual Studio 2015 中切换到 VS 2017 之前,这 3 个大包(System.Reactive、Newtonsoft.Json、AutoMapper)在我的 UWP 项目中都运行良好。

到目前为止唯一有效的是将 Newtonsoft.Json 从最新的 v10.0.3 降级到 v9.0.1(降级到 v10.0.2 或 10.0.1 不起作用)。不幸的是,我无法降级 System.Reactive,因为它们的未列出版本低于 3.0

我还尝试修复我的 VS 安装,以及安装 mobile/xamarin 组件。

非常感谢任何解决方法或见解,因为这对我来说是一个阻塞问题,谢谢!

【问题讨论】:

  • 你有什么问题?
  • 我的问题是:是否有解决方案或解决方法?
  • 尝试将此包:“Microsoft.NETCore.UniversalWindowsPlatform”降级到 5.3.4 或更高版本。另外,用你得到的错误更新问题!
  • @NicoZhu-MSFT,当然,我这里有 VS 解决方案:1drv.ms/u/s!AoAyZHNq7zcSjEXq-4bobPfvFTCX
  • @AnastasiosMoraitis,我尝试降级到 v5.3.4 并没有区别

标签: uwp json.net nuget system.reactive xaml-designer


【解决方案1】:

问题是System.Reactive的3.0.0版本不能很好的兼容UWP。我通过在包管理器控制台中使用以下命令更新到System.Reactive 4.0.0-preview 来解决这个问题。

Install-Package System.Reactive -Version 4.0.0-preview00001

您还可以在 xaml 设计器中禁用项目代码来解决此问题。更多内容可以参考Debugging or Disabling Project Code in XAML Designer

在许多情况下,当您的应用程序在设计器中运行时,项目代码试图访问返回不同值或以不同方式工作的属性或方法,可能会导致 XAML 设计器中出现未处理的异常。您可以通过在 Visual Studio 的另一个实例中调试项目代码来解决这些异常,或者通过在设计器中禁用项目代码来暂时阻止它们。

更新

对于Newtonsoft.Json,WinRT 组件似乎未能找到正确的 Newton.Json 程序集。临时解决方法是手动添加Newtonsoft.json.dll 文件。您可以通过以下步骤实现:

右键引用->添加引用->浏览...->找到C:\Users.nuget\packages\Newtonsoft.Json\10.0.3\lib\portable-net45+wp80+win8+wpa81\Newtonsoft. json.dll->点击添加按钮。 重建您的项目并运行。这个错误应该消失了。\

您也可以使用上述方法解决AutoMapper 问题。

【讨论】:

  • 您的建议似乎解决了 System.Reactive 的问题,但是我仍然遇到 Json.net 的问题:安装最新的 v10.0.3 包并在代码隐藏中引用它后,我得到了这个错误Could not load file or assembly 'Newtonsoft.Json, Version=10.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The bound assembly has a version that is lower than that of the request. (Exception from HRESULT: 0x80132000)
  • 这个问题似乎比某些 NuGet 包更深。如果我只是创建一个新的 NetStandard v1.4 类库并在设计时代码隐藏中引用其中一种类型,我会得到相同的错误:Could not load file or assembly 'NetStandard14Lib, Version=1.0.0.0...。然而,用 NetStandard 1.3 做同样的实验似乎没有问题。
  • 谢谢你——这成功了。起初我无法添加引用(错误对话框指出“无法添加对 'C:\...Json.dll' 的引用。此组件已被构建系统自动引用”。我必须先删除NuGet 包,添加 DLL 引用,然后重新添加包。之后,两者愉快地共存,设计时和运行时都按预期工作。
猜你喜欢
  • 1970-01-01
  • 2019-08-01
  • 1970-01-01
  • 2013-08-21
  • 2021-10-23
  • 1970-01-01
  • 2017-09-18
  • 2018-03-29
  • 2019-12-02
相关资源
最近更新 更多