c# - 带有 Mono 4.2.3 的 Web Api 2

标签 c# .net linux dll mono

<分区>

我有一个在 VS2015 中构建并在 Windows 上编译的 Web API 站点。该站点使用了一些库,目标平台是 4.5.2。

我将编译后的程序集放在一个 ubuntu linux trusty box 上,该 box 具有来自 mono-complete deb 的 mono 4.2.3 运行时。

站点本身使用 OWIN 自托管模式运行,我有一个服务器项目,其中包含一个启动类和一个单独的 exe 项目,用于加载和运行它。然后我尝试在 ubuntu 机器上运行我的项目,我得到以下输出:

Unknown errno: Protocol error
Unknown errno: Protocol error
Unknown errno: Protocol error
Unknown errno: Protocol error

Unhandled Exception:
System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.TypeInitializationException: The type initializer for 'System.Net.Http.Formatting.MediaTypeConstants' threw an exception. ---> System.InvalidProgramException: Invalid IL code in System.Net.Http.Headers.MediaTypeHeaderValue:.ctor (string): method body is empty.

服务的bin目录包含System.Net.Http和System.Net.Http.Formatting dll。我可以看到 mono 本身有这些 dll 的 GAC 版本,所以我将它们从 bin 中删除,希望该项目将恢复使用 mono 自己的 GAC,但随后我收到加载程序错误,因为我的项目似乎正在寻找其中的 5.2.3.0 dll 不是 4.0.0.0。我检查了 vs2015,我可以看到这些引用似乎是 4.0.0.0,所以我有点困惑。

最佳答案

我认为这个异常告诉我们问题是什么——它尝试使用的方法似乎在 Mono 实现中不存在。可能是 .NET 程序集仍在提供正式弃用的功能,或者它是单声道实现中的一个缺口。

您是否尝试过使用单声道编译器来编译您的源代码?虽然库在理论上应该是可移植的,但我发现它们在实践中并不总是如此。

关于c# - 带有 Mono 4.2.3 的 Web Api 2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36716559/

相关文章:

c++ - 'memcpy' 未在此范围内定义

c# - 将 UTF8 转换为 Windows-1252

c# - 如何使用提供的凭据调用 SSPI 的 'AcquireCredentialsHandle'?

c# - 红色边框不会随着 INotifyDataErrorInfo 消失

linux - 从 .txt 文件中读取键值对并在 shell 脚本中使用

linux - 如何获取本地网络中连接到 NFS 服务器的客户端列表?

C#:能否将命名空间拆分到多个文件中?

c# - 将base64转换为图像并在gridview中显示

c# - .NET:如何在具有相似成员(类型和名称)的不同类之间复制数据?

c# - ASP.NET MVC3 和服务器端验证