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

标签 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 对其进行了测试。这工作正常。

最佳答案

里面有三个问题,所以我把答案一分为三。请阅读所有内容:-)

How could I solve this problem?



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

您编译的代码包括对 "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 重新构建程序集并修复(如果有)构建时间错误。例如。 IIRC,RNGCryptoServiceProvider ctor 不可用(由于无法播种,因此什么也不做),应替换为默认的 ctor。

Should this library work for MonoTouch and Mono For Android?



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

代码也有很长一段时间没有更新了。为您的 LDAP 需求寻找(托管或 native )替代方案可能会更好。

Are there better LDAP solutions for Mono?



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

关于mono - 在 Mono 中使用 Novell.Directory.Ldap(适用于 Android 和 Touch),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15379954/

相关文章:

f# - 如何在 Mac OS 上为 fsharpc 设置包路径

c# - Mono 上的 WebSocket 证书(Mac,C#)

c# - 使用npgsql调用以字符为参数的函数

c# - Xamarin.forms 上的后台获取

.net - 使用C#从Active Directory获取组织单位

.net - 是否可以将 Windows 程序集转换为单声道?

ios - 是否可以将Xamarin ios App连接到Swift WatchOS扩展

c# - 包含垃圾字符的 SQLite 文件

.net - 如何使用 .Net 检查 Active Directory 服务器是否已启动并正在运行?

ldap - NamingEnumeration hasMoreElements 方法在为 LDAP 返回 false 时需要花费大量时间