4

MonoTouch および Mono For Android プロジェクトで Novell.Directory.Ldap ライブラリを使用したいと考えています。 http://www.novell.com/coolsolutions/feature/11204.html

プロジェクトを iOS シミュレーター modus でコンパイルすると、エラーなしでコンパイルされ、(iOS シミュレーターで) 正しく実行されます。

プロジェクトを iOS デバイス modus (物理デバイスでアプリをテストするため) でコンパイルすると、次のエラーが発生します。

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

そこには3つの質問があるので、答えを3つに分けました。それらすべてを読んでください:-)

どうすればこの問題を解決できますか?

これは、それを解決するための一般的な解決策を伴う一般的な問題です。

コンパイルしたコードには、への参照が含まれています"mscorlib, Version=1.0.5000.0

smcsこれは、Xamarin.iOS (MonoTouch) で提供されている という名前のコンパイラを使用してアセンブリをビルドしなかったことが原因である可能性があります。そのコンパイラは、適切なmscorlib.dllアセンブリを使用するように参照を設定します (そして、MOBILE プロファイルに欠けているものを報告します)。

Xamarin.Android で機能するという事実は、JIT (ジャスト イン タイム コンパイル) を使用しているため、不足しているメンバーは実行前(および実行がそのコードに到達した場合)に見つからないということです。

OTOH Xamarin.iOS は、デバイスでは (Apple によって) JIT'ing が許可されていないため、AOT (事前コンパイル) を使用します。つまり、不足しているメンバーはビルド時に見つかります。この場合、(マネージド) リンカーは参照を見つけることができず、MT2002 エラーを発行します。

したがって、解決策は、アセンブリを使用して再ビルドしsmcs、ビルド時のエラーがあれば修正することです。たとえば、IIRC の ctorRNGCryptoServiceProviderは利用できず (シードができないため何もしません)、デフォルトの 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 に答える