0

我正在使用 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. 编译并注意错误

...或在此处查看此示例

令人沮丧的是,几周前在 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 组件。

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

4

1 回答 1

2

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

Install-Package System.Reactive -Version 4.0.0-preview00001

您还可以在 xaml 设计器中禁用项目代码来解决这个问题。有关更多信息,您可以参考在 XAML 设计器中调试或禁用项目代码

在许多情况下,当您的应用程序在设计器中运行时,项目代码尝试访问返回不同值或以不同方式工作的属性或方法,可能会导致 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问题。

于 2017-09-12T07:50:10.137 回答