В настоящее время я создаю небольшой встроенный веб-сервер, используя 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, версия = 4.0.0.0, Culture = нейтральный, PublicKeyToken = b03f5f7f11d50a3a') в Server.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, так и на других платформах, но ни одно из решений дляэти проблемы, когда они были обнаружены, оказали положительное влияние на эту конкретную ситуацию.Примеры:
Версии:
- Mono 5.18.1.3
- .Net Framework4.7, 4.7.1, 4.7.2
- C # версия: все от 5 до 7.3
- MonoDevelop 7.8.2
- Linux Ubuntu 18.04
В качестве попытки грубо диагностировать это, я также включил моно библиотеки в / usr / lib / mono дляТокен BrowserCapabilitiesFactory, дающий положительные результаты.
Есть ли у кого-нибудь какие-либо предложения по решению для дальнейшей диагностики этой ситуации?
Я пропустил какую-либо дополнительную ссылку на сборку в проекте?