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

4
我想在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上进行了测试。这个工作正常。


尝试使用来自alpha频道的更新,他们为Xamarin.iOS推送了一个新的mono版本。 - Stephane Delcroix
我刚刚更新了所有最新的 alpha 更新,但这并没有解决问题。还有其他建议吗? - StackFlower
2个回答

7

这里有三个问题,所以我将我的答案分成了三部分。请阅读全部内容 :-)

如何解决这个问题?

这是一个普遍的问题,有一个通用的解决方案来解决它。

你编译的代码包含对 "mscorlib, Version=1.0.5000.0 的引用。

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

Xamarin.Android 可以工作的事实在于它使用 JIT (即时编译),因此在运行时之前找不到缺少的成员 (如果执行到该代码)。

另一方面,Xamarin.iOS 使用 AOT (提前编译),因为在设备上 JIT'ing 是不允许的 (由 Apple 决定)。这意味着在构建时找到缺失的成员。在这种情况下 (托管) 链接器找不到引用并发出 MT2002 错误。

因此,解决方案是使用 smcs 重新构建程序集,并修复在构建时出现的任何错误。例如,我IRC 中记得 RNGCryptoServiceProvider 构造函数不可用 (并且不执行任何操作,因为无法进行种子处理) ,应该替换为默认构造函数。

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

应该可以。然而,我的个人经验表明,Novell.Directory.Ldap 不是很好 (代码和设计问题,例如线程,在 SSL 启用时尤其如此)。

此外,该代码已经有一段时间没有更新了。您可能更好地服务于寻找(托管或本机) LDAP 需求的替代方案。

是否有更好的适用于 Mono 的 LDAP 解决方案?

遗憾的是, 我没有使用过其他类似的库,所以我不能建议替代方案(但也许其他人能够提供帮助)。


3

问题已经解决。

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

在编译我的项目和库项目时,我从库项目中收到了一些错误信息。手动解决这些错误后,对于MonoTouch和Mono for Android都可以正常工作。


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