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 测试了它。这工作正常。

4

2 回答 2

7

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

我该如何解决这个问题?

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

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

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

它适用于 Xamarin.Android 的事实是它使用 JIT(即时编译),因此在运行时之前不会找到缺失的成员(如果执行到达该代码)。

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

smcs因此,解决方案是使用并修复(如果有)构建时间错误来重新构建程序集。例如,该 ctor 不可用的 IIRC RNGCryptoServiceProvider(由于无法播种,因此什么也不做),应该用默认的 ctor 替换。

这个库应该适用于 MonoTouch 和 Mono For Android 吗?

它应该。然而,我的个人经验Novell.Directory.Ldap并不是很好(代码和设计问题,例如线程,特别是启用 SSL 的情况下)。

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

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

遗憾的是,我没有使用任何其他类似的库,所以我无法提出替代方案(但也许其他人可以提供帮助)。

于 2013-03-13T13:49:23.733 回答
3

问题已经解决了。

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

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

于 2013-03-16T13:17:40.077 回答