为什么ReactiveUI依赖于旧版本的System.Reactive?

时间:2016-12-21 17:40:41

标签: c# .net nuget reactiveui reactive

我有一个针对.Net 4.5.2的多项目Visual Studio解决方案。在其中一个项目(WPF应用程序)中,我使用nuget添加System.Reactive版本3.0.1000.0包,后跟ReactiveUI 7.0.0.0包。

在WPF应用程序使用的另一个项目库中,我只是添加了System.Reactive版本3.0.1000.0包。

ReactiveUI包似乎依赖于一组旧的反应包(RX-Core2.2.5等)。我可以这样说,因为WPF应用程序项目文件中的HintPaths指向诸如packages \ Rx-Core.2.2.5 \ lib \ net45 \ System.Reactive.Core.dll

之类的位置

当我构建并运行应用程序时,我得到一个FileLoadException,因为至少有一个项目试图使用错误的dll版本。以下是典型的......

System.IO.FileLoadException occurred
  HResult=0x80131040
  Message=Could not load file or assembly 'System.Reactive.Linq, Version=3.0.1000.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

我可以通过将解决方案中的所有System.Reactive软件包降级到2.2.5来解决这个问题,但这似乎是一个非常旧的版本(2014)。

为什么ReactiveUI会依赖System.Reactive的v2.2.5?有没有办法改变这种行为,以便我可以在整个解决方案中使用最新版本的System.Reactive?

1 个答案:

答案 0 :(得分:7)

this issue on github中对此进行了解释。长话短说 - 新版本的Reactive Extensions出现在RxUI 7.0的开发周期的后期,所以团队决定在此版本中跳过它。它可以帮助人们维护现有的应用程序 - 他们可以升级RxUI版本而不会同时出现Rx版本。依赖于最新的Rx计划用于RxUI 8.0版本。

As @shiftkey states it:

  

由于System.Reactive 3.0引入的次要API流失(它更多地是关于基础架构并将事情纳入基础),以及RxUI 7.0已经如此接近的事实,因此决定离开更容易那是为了下一个主要版本。

     

是的,现在所有的基础设施都在工作,我们的目标是保持RxUI 8的发布周期。

一方注意。 Rx 2.x在这么长的时间内(2014年)没有更新的事实并没有它看起来那么糟糕 - 这是一个非常可靠的技术,你可以毫无后顾之忧地使用它。升级到3.0并没有太大的API改变(并没有引入重大变化)所以如果你现在坚持2.x,那么在项目周期的后期升级不应该是痛苦的。

尽管如此,如果您真的想今天使用Rx 3.0和RxUI,我建议您加入project slack channel并参与该项目,通过测试前沿版本并为自己做出贡献:)