从Mono

时间:2019-05-12 21:51:24

标签: c# .net mono

我目前正在使用Mono(在Linux上使用MonoDevelop)构建小型嵌入式Web服务器。在尝试使用代码示例中的建议来检测浏览器类型时,我遇到了一个问题。 程序可以正确编译,但是下面的代码会导致在声明该函数的位置进入程序时崩溃:

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:无法从类型ref(预期的类>“ System.Web.Configuration.BrowserCapabilitiesFactory”在程序集“ System.Web,版本= 4.0.0.0,文化=中性,PublicKeyToken = b03f5f7f11d50a3a”中解析类型为令牌01000028的类型) )    在Context.cs:143中的Server.Context.onNewRequest(System.Object p_origin,> Server.Listener + NewContextEventArgs p_args)[0x000b9]中

我没有任何NuGet软件包。我使用ASP.Net,它是使用HttpListener的纯控制台应用程序(守护程序)。因此,获取浏览器功能的常规方法不可用(即Request.Browser在这种情况下不可用)。

我尝试了以下方法:

  • 所涉及库的不同版本;
  • 清洗溶液;
  • 从解决方案和子项目中删除所有bin和obj文件夹;
  • 在调试和发布模式下进行构建;
  • 重新安装;
  • 上述各项的组合。

我也已经在Stack Overflow和其他平台上搜索了一些类似问题的解决方案,但是发现这些问题的解决方案都没有对这种特定情况产生任何积极影响。例子:

版本:

  • 单声道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中的Mono库添加了“ BrowserCapabilitiesFactory”令牌,从而产生了积极的结果。

有人对解决进一步诊断这种情况有什么建议吗?

我在项目中缺少任何其他装配参考吗?

0 个答案:

没有答案