在便携式类库中使用ZeroMQ .Net&单

时间:2014-04-04 12:30:12

标签: c# xamarin zeromq portable-class-library

我尝试使用 ZeroMQ在新项目中。

服务器和客户端必须通过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。 问题描述于 this question (但对于Android)

代码编译,但在运行时 - libzmq.dll错误DllNotFoundException。

您能否告诉我如何正确配置libzmq?

1 个答案:

答案 0 :(得分:0)

阅读xamarin的帖子,以及我对Xamarin中PCL限制的经验。这不是一个选择。当您导入ZeroMQ时,它会将X86和amd64的二进制文件添加到项目中。这些二进制文件允许它在X86 / amd64平台上使用单声道框架,而不是arm(android / ios / windows phone)。

同样在What is a Portable Class Library?的Xamarin文档中,它有缺点列表

  • 由于多个应用程序之间共享相同的可移植类库,因此无法引用特定于平台的库(例如,Community.CsharpSqlite.WP7)。
  • 可移植类库子集可能不包含MonoTouch和Mono for Android中可用的类(例如DllImport或System.IO.File)。

DLLNotFoundException可能来自缺乏DllImport支持