在可移植类库.Net和Mono中使用ZeroMQ
本文关键字:ZeroMQ Mono 可移植 类库 Net | 更新日期: 2023-09-27 17:56:42
>我尝试使用新项目中的零MQ。
服务器和客户端必须通过 ZeroMQ 进行交互(交换消息)。目前计划实现几种客户Android、Windows,可能是另一种。我想在PCL中做交互的基本逻辑。
Visual Studio 2013 + Xamarin
我创建了 PCL 项目,其中安装了 NuGet clrzmq 包。创建的测试方法:
public string M1()
{
using (var c = new Context())
{
var subscriber = c.Socket(SocketType.SUB);
subscriber.Bind(Transport.TCP, "192.168.123.23:9292");
subscriber.Subscribe("", Encoding.UTF8); // subscribe to all messages
var message = subscriber.Recv(Encoding.UTF8, SendRecvOpt.NONE);
return message;
}
}
当我在Android项目中调用此方法时,我看到DllNotFoundException。中描述的问题这个问题(但对于安卓)
代码编译,但在运行时 - 错误 DllNotFoundException for libzmq.dll。
你能告诉我如何正确配置链接libzmq吗?
在阅读了 xamarin 的一篇文章以及我对 Xamarin 中 PCL 局限性的经验之后。这不是一个选项。当您导入 ZeroMQ 时,它会将 X86 和 amd64 的二进制文件添加到项目中。这些二进制文件允许它在X86/amd64平台上使用mono框架,而不是arm(android/ios/windows phone)。
同样在 Xamarin 文档中 什么是可移植类库? 它具有缺点列表
- 由于同一个可移植类库在多个应用程序之间共享,因此无法引用特定于平台的库(例如。Community.CsharpSqlite.WP7).
- 可移植类库子集可能不包括在 MonoTouch 和 Mono for Android 中都可用的类(例如 DllImport 或 System.IO.File)。
DLLNotFoundException可能是由于缺乏DllImport支持。