在Mono中使用Novell.Directory.Ldap(适用于Android和Touch)

时间:2013-03-13 08:11:09

标签: mono xamarin.ios ldap xamarin.android novell

我想在MonoTouch和Mono For Android项目中使用Novell.Directory.Ldap库。 http://www.novell.com/coolsolutions/feature/11204.html

当我在iOS模拟器模式中编译我的项目时,它编译没有错误并正确运行(在iOS模拟器中)。

当我在iOS设备模式中编译项目时(使用物理设备测试应用程序),我收到此错误:

Error MT2002: Failed to resolve "System.Void System.Security.Cryptography.RNGCryptoServiceProvider::.ctor(System.Byte[])" reference from "mscorlib, Version=1.0.5000.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" (MT2002) (MyProject)

我怎么能解决这个问题?我找不到解决方案。

此库是否适用于MonoTouch和Mono For Android? Mono有更好的LDAP解决方案吗?

更新:我刚用Mono For Android测试过它。这很好。

2 个答案:

答案 0 :(得分:7)

那里有三个问题,所以我把答案分成了三个。请阅读所有这些内容: - )

  

我怎么能解决这个问题?

这是解决它的一般解决方案的一般问题。

您编译的代码包含对"mscorlib, Version=1.0.5000.0

的引用

这可能是因为您没有使用Xamarin.iOS(MonoTouch)提供的编译器(名为smcs)来构建程序集。该编译器会将引用设置为使用正确的mscorlib.dll程序集(并报告MOBILE配置文件中缺少的任何内容)。

可以为Xa​​marin.Android工作的事实是它使用JIT(只是及时编译),因此在运行时之前找不到缺少的成员(如果执行到达该代码)。

OTOH Xamarin.iOS使用AOT(提前编译),因为在设备上不允许(由Apple)进行JIT。这意味着在构建时发现缺少成员。在这种情况下,(托管)链接器无法找到引用并发出MT2002错误。

所以解决方案是使用smcs重新构建程序集并修复构建时错误(如果有的话)。例如。 IIRC RNGCryptoServiceProvider ctor不可用(并且自播种以来什么都不做),应该用默认的ctor替换。

  

此库是否适用于MonoTouch和Mono For Android?

它应该。但是,Novell.Directory.Ldap个人体验非常好(代码和设计问题,例如线程,特别是启用了SSL)。

此外,代码还没有更新。您可以更好地查看(托管或本机)替代方案以满足您的LDAP需求。

  

Mono有更好的LDAP解决方案吗?

可悲的是,我没有使用任何其他类似的图书馆,所以我不能建议替代方案(但也许其他人可以提供帮助)。

答案 1 :(得分:3)

问题解决了。

我没有使用Novell的dll,而是下载了Novell LDAP库的所有源文件,并将它们放入新的库项目中。然后我从我自己的Mono项目中引用了该库。

在编译我的项目和库项目时,我收到了来自库项目的一些错误。手动解决这些错误后,它适用于两者(MonoTouch和Android的Mono)。