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, которое содержит
configSections
section
ссылка на сборку 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.