Ошибки в приложениях использующих Lers.Framework

Раздел для разработчиков по взаимодействию с ЛЭРС УЧЕТ, созданию собственных внешних модулей, экспорту/импорту данных и т.д.

Модератор: Модераторы

Ответить
imin
Сообщения: 595
Зарегистрирован: 02 июл 2014, 01:52

Ошибки в приложениях использующих Lers.Framework

Сообщение imin » 05 мар 2020, 17:10

После обновления до 3.34.2 во приложениях использующих Lers.Framework при попытке подключиться к серверу:

Код: Выделить всё

var server = new LersServer();
server.Connect(host, port, new BasicAuthenticationInfo(login, password));
теперь выкидывает исключение:

Код: Выделить всё

System.IO.FileNotFoundException: 'Не удалось загрузить файл или сборку "Microsoft.AspNetCore.SignalR.Client.Core, Version=3.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60" либо одну из их зависимостей. Не удается найти указанный файл.'
Если подтянуть через nuget, то ругается на другую dll. И так несколько раз пока все не подтянешь.

Если, например, Microsoft.AspNetCore.SignalR.Client.Core подтягивать через nuget то соответственно куча зависимостей подтягивается:
Microsoft.Extensions.DependencyInjection.Abstractions.3.1.0
Microsoft.Extensions.Logging.Abstractions.3.1.0
System.Buffers.4.5.0
System.ComponentModel.Annotations.4.7.0
System.Numerics.Vectors.4.5.0
System.Runtime.CompilerServices.Unsafe.4.7.0
System.Memory.4.5.3
Microsoft.Extensions.Primitives.3.1.0
Microsoft.Extensions.Configuration.Abstractions.3.1.0
Microsoft.Extensions.Configuration.3.1.0
Microsoft.Extensions.Configuration.Binder.3.1.0
Microsoft.Extensions.Options.3.1.0
System.Text.Encodings.Web.4.7.0
System.Threading.Tasks.Extensions.4.5.2
Microsoft.Bcl.AsyncInterfaces.1.1.0
Microsoft.Extensions.DependencyInjection.3.1.0
Microsoft.Extensions.Logging.3.1.0
System.IO.Pipelines.4.7.0
Microsoft.AspNetCore.Http.Features.3.1.0
Microsoft.AspNetCore.Connections.Abstractions.3.1.0
System.Threading.Channels.4.7.0
System.ValueTuple.4.5.0
System.Text.Json.4.7.0
Microsoft.AspNetCore.SignalR.Common.3.1.0
Microsoft.AspNetCore.SignalR.Protocols.Json.3.1.0
Microsoft.AspNetCore.SignalR.Client.Core.3.1.0

Сидеть угадывать что дальше на рантайме может понадобиться в каждом проекте как-то не хочется. Что можете посоветовать в решении проблемы?
ООО "Навигационно-информационный центр" г.Якутск
Иван Славный
Инженер техподдержки
Инженер техподдержки
Сообщения: 7068
Зарегистрирован: 02 мар 2016, 05:45

Re: Ошибки в приложениях использующих Lers.Framework

Сообщение Иван Славный » 06 мар 2020, 04:25

Начиная с версии 3.34 для приложений использующих подключения к Серверу действительно требуется пакет "Microsoft.AspNetCore.SignalR.Client". После установки данного пакета из Nuget подтягиваются все необходимые зависимости.

Также начиная с этой версии мы не регистрируем используемые нами библиотеки в GAC, а распространяем их вместе с приложением. Вы можете придерживаться такой же концепции либо регистрировать эти библиотеки в GAC. В данном случае вы, как разработчик, самостоятельно решаете для себя что вам удобнее.
imin
Сообщения: 595
Зарегистрирован: 02 июл 2014, 01:52

Re: Ошибки в приложениях использующих Lers.Framework

Сообщение imin » 06 мар 2020, 11:10

В общем, чтобы не мучаться с версиями и кучей зависимостей, а при обновлении ЛЭРС УЧЕТ наверняка вы будете обновлять и Microsoft.AspNetCore.SignalR.Client и прочее, сделал как-то так:

Код: Выделить всё

//подписываемся на событие для разрешения и поиска сборок
AppDomain.CurrentDomain.AssemblyResolve += (sender, eventArgs) =>
{
  //ищем в папке c:\Program Files\LERS\Client\ файлы *.dll
  //загружаем их через Assembly.LoadFrom(path)
  //ищем такую сборку Assembly, у которой FullName совпадает с параметром Name аргумента eventArgs
  //или, если не находит, то пробуем поискать вхождение имени FullName из Assemly.ExportedTypes в имя eventArgs.Name(например требовалась сборка System.Runtime.CompilerServices.Unsafe версии 4.0.6.0, а в файлах ЛЭРС УЧЕТ была более новая версия, поэтому FullName не совпадает с eventArgs.Name)
  //возвращаем найденную Assembly или возвращаем null
};
И заработало. По идее раз вы используемые библиотеки распространяете вместе с приложением, то проблем возникнуть не должно.
ООО "Навигационно-информационный центр" г.Якутск
Иван Славный
Инженер техподдержки
Инженер техподдержки
Сообщения: 7068
Зарегистрирован: 02 мар 2016, 05:45

Re: Ошибки в приложениях использующих Lers.Framework

Сообщение Иван Славный » 10 мар 2020, 03:41

Спасибо за представленный вариант решения проблемы! Он будет полезен другим пользователям нашего форума.
Ответить