В настоящее время я создаю небольшой встроенный веб-сервер с использованием Mono (с использованием MonoDevelop в Linux). Пытаясь определить тип браузера по рекомендации из примера кода, я столкнулся с проблемой. Программа компилируется правильно, но приведенный ниже код приводит к сбою программы при входе в функцию, в которой она объявлена:
using System.Collections;
using System.Collections.Specialized;
using System.Web;
using System.Web.Configuration;
[...]
var l_caps = new HttpBrowserCapabilities
{
Capabilities = new Hashtable { { string.Empty, p_http_context.Request.UserAgent } }
};
var l_capsFactory = new BrowserCapabilitiesFactory();
l_capsFactory.ConfigureBrowserCapabilities(new NameValueCollection(), l_caps);
Приведенный выше код должен был анализировать строку пользовательского агента на предмет заголовков запроса (присутствующих в p_http_context.Request.UserAgent), позволяя раскрыть возможности клиентского браузера на стороне сервера в объекте l_caps. Однако, если в коде присутствует следующая строка, как только поток программы достигает функции, возникает исключение, описанное ниже. Комментирование строки позволяет избежать исключения, но только потому, что оно удаляет функциональность:
var l_capsFactory = new BrowserCapabilitiesFactory();
Полученная ошибка выглядит следующим образом:
System.TypeLoadException: не удалось разрешить тип с токеном 01000028 из typeref (ожидаемый класс> 'System.Web.Configuration.BrowserCapabilitiesFactory' в сборке 'System.Web, Version = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b03f5f7f11d50a3a') на сервере .Context.onNewRequest (System.Object p_origin,> Server.Listener + NewContextEventArgs p_args) [0x000b9] в Context.cs: 143
У меня нет пакета NuGet. Я не использую ASP.Net, это чистое консольное приложение (демон), использующее HttpListener. Таким образом, обычные методы получения возможностей браузера недоступны (а именно Request.Browser в этом контексте недоступен).
Я пробовал следующее:
- разные версии задействованных библиотек;
- очищающий раствор;
- удаление всех папок bin и obj из решения и подпроектов;
- сборка как в режиме отладки, так и в режиме выпуска;
- переустановка;
- комбинации вышеперечисленного.
Я также искал решения для нескольких похожих проблем как на Stack Overflow, так и на других платформах, но ни одно из решений этих проблем, когда оно было найдено, не оказало положительного влияния на эту конкретную ситуацию. Примеры:
- System.TypeLoadException: не удалось разрешить тип с токеном 01000115
- Необработанное исключение: System.TypeLoadException: не удалось разрешить тип с помощью токен 0100003b
- Не удалось разрешить тип с токеном 0100000f
- System.TypeLoadException: не удалось разрешить тип с токеном 0100000f
- xamarin: System.TypeLoadException: не удалось разрешить тип с помощью токена 01000017
- System.TypeLoadException: не удалось разрешить тип с токеном 0100000c
- System.TypeLoadException: не удалось разрешить тип с токеном 01000019
Версии:
- Моно 5.18.1.3
- .Net Framework 4.7, 4.7.1, 4.7.2
- Версия C #: все с 5 по 7.3
- MonoDevelop 7.8.2
- Linux Ubuntu 18.04
В качестве попытки грубо диагностировать это, я также нашел монобиблиотеки в / usr / lib / mono для токена "BrowserCapabilitiesFactory", что дало положительные результаты.
Есть ли у кого-нибудь предложения по решению для дальнейшей диагностики данной ситуации?
Мне не хватает каких-либо дополнительных ссылок на сборку в проекте?
System.Web.Instrumentation.PageInstrumentationService
. Класс выглядит как существующий в моем mono / 4.6.2-api / System.Web.dll. Не знаю, как исправить. - person SandRock   schedule 30.01.2021