在可移植类库中使用ZeroMQ的.Net和Mono。

3
我尝试在新项目中使用ZeroMQ。 服务器和客户端必须通过ZeroMQ进行交互(交换消息)。 计划实现几种类型的客户端,如Android、Windows等。 我想在PCL中制定交互的基本逻辑。
使用Visual Studio 2013 + Xamarin创建了PCL项目,并安装了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错误。问题类似于这个问题(但是针对Android)。
代码编译通过,但在运行时会出现libzmq.dll的DllNotFoundException错误。
你能告诉我如何正确配置链接libzmq吗?
1个回答

0

在阅读了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支持。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接