Почему ReactiveUI зависит от старой версии System.Reactive?

У меня есть мультипроектное решение Visual Studio для.Net 4.5.2 . В одном из проектов (приложение 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 и т. Д.). Я могу сказать это, потому что HintPath в файле проекта приложения WPF указывают на такие места, как пакеты \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 вытягивает зависимость от v2.2.5 System.Reactive? Есть ли способ изменить это поведение, чтобы я мог использовать последнюю версию System.Reactive во всем решении?

1 ответ

Решение

Это объясняется в этом выпуске на github. Короче говоря, новая версия Reactive Extensions появилась в конце цикла разработки RxUI 7.0, поэтому команда решила пропустить ее для этого выпуска. Это помогает людям поддерживать существующие приложения - они могут обновить версию RxUI без одновременного изменения версии Rx. Принятие зависимости от последней версии Rx запланировано на выпуск RxUI 8.0.

Как говорит @shiftkey:

Из-за незначительного оттока API, представленного в System.Reactive 3.0 (речь шла больше об инфраструктуре и получении основ), а также из-за того, что RxUI 7.0 уже был так близок, было решено, что проще оставить это для следующий основной выпуск.

И да, теперь, когда вся инфраструктура работает, мы стремимся сфокусировать цикл выпуска RxUI 8.

Примечание с одной стороны. Тот факт, что Rx 2.x не обновлялся так долго (2014 год), не так уж плох, как может показаться - это действительно надежная технология, и вы можете использовать ее, не беспокоясь. Обновление до 3.0 не сильно изменило API (и не внесло критических изменений), поэтому, если вы сейчас придерживаетесь версии 2.x, обновление на более позднем этапе цикла проекта не должно быть болезненным.

Тем не менее, если вы действительно хотите сегодня использовать Rx 3.0 с RxUI, я предлагаю вам присоединиться к свободному каналу проекта и принять участие в проекте, протестировав новейшие выпуски и внеся свой вклад:)

Другие вопросы по тегам