Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using Novell.Directory.Ldap in Mono (For Android and Touch)

I want to use the Novell.Directory.Ldap library in a MonoTouch and Mono For Android project. http://www.novell.com/coolsolutions/feature/11204.html

When I compile my project in iOS simulator modus, It compiles without errors and runs correctly (in the iOS simulator).

When I compile my project in iOS device modus (to test the app with a physical device), I get this error:

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)

How could I solve this problem? I can't find a solution.

Should this library work for MonoTouch and Mono For Android? Are there better LDAP solutions for Mono?

UPDATE: I just tested it with Mono For Android. This works fine.

like image 506
StackFlower Avatar asked Dec 27 '22 07:12

StackFlower


1 Answers

There's three questions in there, so I splitted my answers in three. Please read all of them :-)

How could I solve this problem?

This is a general problem with a general solution to solve it.

The code you compiled is including a reference to "mscorlib, Version=1.0.5000.0

That's likely because you did not use the compiler provided with Xamarin.iOS (MonoTouch), named smcs, to build the assembly. That compiler would set the references to use the right mscorlib.dll assembly (and report anything missing in the MOBILE profile).

The fact that it can work for Xamarin.Android is that it uses the JIT (just in time compilation), so missing members won't be found before runtime (and if execution reach that code).

OTOH Xamarin.iOS uses AOT (ahead of time compilation) since JIT'ing is not allowed (by Apple) on devices. That means missing members are found at build time. In this case the (managed) linker can't find the reference and issue the MT2002 error.

So the solution is to re-build the assembly using smcs and fix, if any, build time errors. E.g. IIRC that RNGCryptoServiceProvider ctor is not available (and does nothing since seeding is not possible) and should be replaced with the default ctor.

Should this library work for MonoTouch and Mono For Android?

It should. However my personal experience with Novell.Directory.Ldap was not really good (code and design issues, e.g. threading, in particular with SSL enabled).

Also the code has not been updated for quite a while. You might be better served at looking at (managed or native) alternatives for your LDAP needs.

Are there better LDAP solutions for Mono?

Sadly I have not used any other similar library so I can't suggest alternatives (but maybe other people will be able to help).

like image 62
poupou Avatar answered Jan 19 '23 00:01

poupou