TypeLoadException Не удалось загрузить тип WebConfigurationManager при вызове библиотеки .Net Framework через приложение Core Web API

У меня есть приложение Web API, созданное с использованием .Net Core 2.1. Контроллер из этого веб-приложения вызывает библиотеку классов бизнес-уровня, которую я также разработал с использованием .Net Core 2.1. Все идет нормально...

Библиотека бизнес-классов .Net Core ссылается на широко используемую библиотеку классов .Net Framework 4.6.1, которую мы также разработали. Эта библиотека в основном используется для связи с очередями служебной шины Azure.

В результате эта часто используемая библиотека классов .Net Framework, в свою очередь, ссылается и использует сборку Microsoft .Net Framework, Microsoft.ServiceBus, как показано в строке кода ниже.

MessagingFactory messagingFactory = MessagingFactory.CreateFromConnectionString(configValue);

Как вы можете видеть, строка кода выше, которая находится в нашей широко используемой библиотеке классов .Net Framework, передает строковое значение (например, configValue) статическому методу, который существует в сборке Microsoft.ServiceBus.

Однако всякий раз, когда выполняется приведенная выше строка кода, я получаю следующую ошибку:

При обработке запроса возникло необработанное исключение.

TypeLoadException: не удалось загрузить тип «System.Web.Configuration.WebConfigurationManager» из сборки «System.Web, версия = 4.0.0.0, культура = нейтральный, PublicKeyToken = b03f5f7f11d50a3a».

Ради интереса я добавил следующую строку кода, в которой получаю ту же ошибку:

string configValue = WebConfigurationManager.AppSettings["connectionString"];

Очевидно, проблема в том, что сборка System.Web .Net Framework не загружена.

Однако, учитывая, что веб-приложение является .Net Core, как я могу заставить это веб-приложение загружать базовую сборку .Net Framework, которая требуется для широко используемой библиотеки?


Рассмотренные решения - (неподходящие)

  • Раньше у меня была аналогичная проблема, которую легко решить путем установки необходимого пакета NuGet, но в этот раз мне не удалось найти такой пакет.
  • У нашей команды есть еще одно приложение веб-API в .Net Framework, которое без проблем вызывает эту широко используемую библиотеку классов, однако это не вариант, и нам нужно сохранить текущее приложение веб-API. на основе .Net Core.
  • Я также подумал о том, чтобы переписать широко используемую библиотеку как библиотеку классов .Net Standard 2.0, но с учетом размера библиотеки это не было бы реалистичным подходом, и он не обязательно затронет лежащие в основе проблема.

Другие возможные решения

  • Загрузите Web.config из приложения .Net Core Web API, который содержит configSections section, ссылающийся на сборку System.Web. Я пробовал это, но это не сработало, и я уверен, что если бы я просто не выполнил все необходимые шаги. Возможно ли это, и если да, то какие-либо предложения?
  • Есть ли альтернативный способ загрузить сборку .Net Framework из веб-API .Net Core?
  • Пожертвуйте, используя часто используемую библиотеку, и найдите альтернативную (примерную) базу кода, которая обеспечивает аналогичную функциональность (т. Е. Использует Microsoft.ServiceBus для работы с нашими очередями Azure), но основывается либо на .Net Core, либо на .Net Standard. Но, как и в приведенном выше решении .Net Standard, я не уверен, сколько функций потребуется реплицировать, а также не уверен в отправной точке. Мысли?

Спасибо!


person MartyG    schedule 15.07.2018    source источник


Ответы (1)


У меня была такая же проблема, и после расследования я обнаружил, что моя версия времени выполнения приложения-функции azure - 2.0 ~ и согласно документация версии 2 - это .NET Core 2, а версия приложения-функции 1.0 ~ - .NET Framework 4.7. и мой проект приложения функции Visual Studio имеет .NET Framework 4.6.1. Итак, мне просто нужно было изменить версию моего приложения-функции на ~ 1.0.

В двух словах

  • Если у вас есть приложение-функция Visual Studio в .NET Core 2.0, используйте только приложение-функцию версии 2.0.
  • Если у вас есть приложение-функция Visual Studio в .NET Framework 4.7, используйте только приложение-функцию версии 1.0.

введите описание изображения здесь

person Jawand Singh    schedule 08.10.2018