Переход на Reactive Extensions версии 3.1.1
[ ]В версии 5.2 приложение iikoFront перешло на использование библиотеки Reactive Extensions (далее Rx) версии 3.1.1 вместо прежней версии 2.2.5. Это может повлиять на работу плагинов, использовавших прежнюю версию Rx.
Используемые внутри iikoFront библиотеки являются деталями его реализации и формально не имеют отношения к публичному API, если бы не два но:
- в API V3 был использован тип
System.Reactive.Unit
из библиотекиSystem.Reactive.Core.dll
версии 2.2.5, то есть зафиксированная в данный момент версия API V3 жёстко привязана к Rx 2.2.5; - плагины
SamplePlugin
иCustomerScreenPlugin
использовали Rx, но не публиковали соответствующие библиотеки в папку с результатами сборки, разработчики плагинов, ориентируясь на эти примеры, могли поступать так же, фактически плагины неявно использовали библиотеки Rx из папки приложения iikoFront.
Привязывание API V3 к Rx было ошибкой. Начиная с V4 зависимость API от Rx удалена, вместо System.Reactive.Unit
используется тип Resto.Front.Api.V4.VoidValue
. Для обеспечения обратной совместимости с V3 оставлены две библиотеки из Rx 2.2.5 — System.Reactive.Core.dll
и System.Reactive.Interfaces.dll
(первая из них содержит тип System.Reactive.Unit
и ссылается на вторую), при необходимости они будут загружены в память автоматически.
После обновления приложения iikoFront с ранее установленным плагином до версии 5.2 в работе плагина могут начать возникать следующие ошибки:
System.IO.FileNotFoundException: Could not load file or assembly ‘System.Reactive.Core, Version=2.2.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35’ or one of its dependencies. The system cannot find the file specified.
В этом случае можно восстановить работу плагина, доустановив недостающие файлы в папку с плагином. Поскольку все версии SDK до 5.2 содержали одну и ту же версию Rx 2.2.5, можно взять недостающие файлы из любой старой версии SDK. Эти же файлы можно взять из папки, куда установлено приложение iikoFront, до его обновления на 5.2. Если обновление уже установлено и библиотеки Rx перезаписаны версией 3.1.1, старые версии файлов можно найти в интернете. Например, библиотеку System.Reactive.Core.dll
можно получить, скачав и распаковав nuget-пакет Rx-Core, это обычный zip-архив, внутри которого находится lib/net40/System.Reactive.Core.dll
.
При разработке нового плагина следует предусмотреть, чтобы все библиотеки, используемые плагином и не являющиеся частью API, устанавливались в папку с плагином. Несмотря на то, что для V3 допускается установка плагина непосредственно в папку Plugins, во избежание конфликтов с зависимостями других плагинов рекомендуется установка в подпапку.