C# 获得;无法从typeref“中解析带有标记0100028的类型;来自Mono的BrowserCapabilities工厂
我目前正在使用Mono(在Linux上使用MonoDevelop)构建一个小型嵌入式web服务器。在尝试使用代码示例中的建议检测浏览器类型时,我遇到了一个问题。程序编译正确,但以下代码会导致程序在进入声明函数时崩溃:C# 获得;无法从typeref“中解析带有标记0100028的类型;来自Mono的BrowserCapabilities工厂,c#,.net,mono,C#,.net,Mono,我目前正在使用Mono(在Linux上使用MonoDevelop)构建一个小型嵌入式web服务器。在尝试使用代码示例中的建议检测浏览器类型时,我遇到了一个问题。程序编译正确,但以下代码会导致程序在进入声明函数时崩溃: 使用系统集合; 使用System.Collections.Specialized; 使用System.Web; 使用System.Web.Configuration; [...] var l_caps=新的HttpBrowserCapabilities { 能力=新哈希表{{str
使用系统集合;
使用System.Collections.Specialized;
使用System.Web;
使用System.Web.Configuration;
[...]
var l_caps=新的HttpBrowserCapabilities
{
能力=新哈希表{{string.Empty,p_http_context.Request.UserAgent}
};
var l_capsFactory=新的BrowserCapabilitiesFactory();
l_capsFactory.ConfigureBrowserCapabilities(新的NameValueCollection(),l_caps);
上面的代码应该解析请求头的用户代理字符串(出现在p_http_context.request.UserAgent上),允许客户端浏览器的功能在l_caps对象中向服务器端公开。但是,如果代码中存在以下行,程序流一到达函数,就会引发下面描述的异常。注释行可以避免异常,但仅因为它删除了以下功能:
var l_capsFactory=new BrowserCapabilitiesFactory();
得到的误差如下:
System.TypeLoadException:无法从typeref解析标记为01000028的类型(程序集'System.Web,版本=4.0.0.0,区域性=中性,PublicKeyToken=b03f5f7f11d50a3a'中的类应为'System.Web.Configuration.BrowserCapabilitiesFactory'
在Context.cs:143中的Server.Context.onnerRequest(System.Object p_origin,>Server.Listener+NewContextEventArgs p_args)[0x000b9]处
我没有任何NuGet软件包。我不是使用ASP.Net,而是使用HttpListener的纯控制台应用程序(守护进程)。因此,获取浏览器功能的传统方法不可用(即Request.browser在此上下文中不可用)
我尝试了以下方法:
- 所涉图书馆的不同版本李>
- 清洗溶液李>
- 从解决方案和子项目中删除所有bin和obj文件夹李>
- 在调试和发布模式下构建李>
- 重新安装李>
- 上述各项的组合
- Mono 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
我是否缺少项目中的任何其他程序集引用?您正在使用http,因此我将使用wireshark或fiddler之类的嗅探器,并从嗅探器中获取实际返回项。我会检查状态是否为200 OK或其他。有两种http模式1)1.0是流模式2)1.1是块模式。我怀疑您正在使用1.1,并且只收到一个响应,并且由于没有发送下一个chunk消息,连接正在超时。您的响应与手头的问题完全无关。除了连接工作正常外,程序只有在我添加行后才开始出现异常。HTTP工作正常,因为程序是服务器,所以实际发送状态的是程序。此外,只有在收到浏览器信息后才会发送状态。存在大量类似问题,而且没有人进行修复。因此,在所有情况下,您应该考虑切换到.NET内核,这是在积极开发中。您应该知道,当.NET5在2020年发布时,Mono将消失。这意味着从头开始重新创建项目,并复制旧的源代码,而旧的源代码在.NETCore中可能没有所有可用的内容。我也读过那些新闻,我的帖子比那些新闻早。无论如何,现在转换到.NET内核可能是不可行的。@LexLi:尽管如此,Mono不会消失,他告诉Reg。“我们将在Mono上投入较少的工程精力。它将主要流入.NET 5.0。社区可能会投入较少的工程精力,工作负载将逐渐转移到.NET 5.0。但我们不会试图扼杀该项目。仍然有一些大型应用程序依赖Mono,并且可能永远不会移植到.NET 5.0上。”因此,这意味着它肯定不会在2020年消失。