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

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

Базовая библиотека бизнес-классов.Net ссылается на широко используемую библиотеку классов.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, но в этом случае я не смог найти такой пакет.
  • У нашей команды есть еще одно приложение Web API в .Net Framework, которое без проблем вызывает эту обычно используемую библиотеку классов, однако это не вариант, и нам нужно поддерживать текущее приложение Web API на основе.Net Core.
  • Я также рассмотрел вопрос о переписывании обычно используемой библиотеки как библиотеки классов .Net Standard 2.0, но это с учетом размера библиотеки не будет реалистичным подходом и не обязательно решит основную проблему.

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

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

Спасибо!

1 ответ

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

В двух словах

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

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