3

MicrosoftEWSマネージAPIを使用してiOSアプリを構築しようとしています。http://www.microsoft.com/download/en/details.aspx?id=13480からmsiをダウンロードし、ソリューションフォルダーの下にDLLをコピーしました。シミュレーター用にビルドする場合、ビルドして正常に実行されますが、物理デバイスをターゲットにしようとすると、mtouchは次のように失敗します。

Compiling to native code
/Developer/MonoTouch/usr/bin/mtouch -v --nomanifest --nosign -dev "/Users/Projects/HelloMonoTouch/MyEWSApp/bin/iPhone/Release/MyEWSApp.app" -r "/Developer/MonoTouch/usr/lib/mono/2.1/System.dll" -r "/Developer/MonoTouch/usr/lib/mono/2.1/System.Xml.dll" -r "/Developer/MonoTouch/usr/lib/mono/2.1/System.Core.dll" -r "/Developer/MonoTouch/usr/lib/mono/2.1/monotouch.dll" -r "/Users/Projects/HelloMonoTouch/MyEWSApp/ThirdParty/Microsoft.Exchange.WebServices.dll" -linksdkonly -sdk "5.0" "/Users/Projects/HelloMonoTouch/MyEWSApp/bin/iPhone/Release/MyEWSApp.exe"
Framework is: /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk
Copied /Users/Projects/HelloMonoTouch/MyEWSApp/bin/iPhone/Release/MyEWSApp.exe to /Users/Projects/HelloMonoTouch/MyEWSApp/bin/iPhone/Release/MyEWSApp.app/MyEWSApp.exe
Copied /Developer/MonoTouch/usr/lib/mono/2.1/mscorlib.dll to /Users/Projects/HelloMonoTouch/MyEWSApp/bin/iPhone/Release/MyEWSApp.app/mscorlib.dll
Copied /Developer/MonoTouch/usr/lib/mono/2.1/monotouch.dll to /Users/Projects/HelloMonoTouch/MyEWSApp/bin/iPhone/Release/MyEWSApp.app/monotouch.dll
Copied /Developer/MonoTouch/usr/lib/mono/2.1/System.dll to /Users/Projects/HelloMonoTouch/MyEWSApp/bin/iPhone/Release/MyEWSApp.app/System.dll
Copied /Developer/MonoTouch/usr/lib/mono/2.1/Mono.Security.dll to /Users/Projects/HelloMonoTouch/MyEWSApp/bin/iPhone/Release/MyEWSApp.app/Mono.Security.dll
Copied /Developer/MonoTouch/usr/lib/mono/2.1/System.Core.dll to /Users/Projects/HelloMonoTouch/MyEWSApp/bin/iPhone/Release/MyEWSApp.app/System.Core.dll
Copied /Developer/MonoTouch/usr/lib/mono/2.1/System.Xml.dll to /Users/Projects/HelloMonoTouch/MyEWSApp/bin/iPhone/Release/MyEWSApp.app/System.Xml.dll
Copied /Users/Projects/HelloMonoTouch/MyEWSApp/ThirdParty/Microsoft.Exchange.WebServices.dll to /Users/Projects/HelloMonoTouch/MyEWSApp/bin/iPhone/Release/MyEWSApp.app/Microsoft.Exchange.WebServices.dll
Linking SDK only for assembly /Users/Projects/HelloMonoTouch/MyEWSApp/bin/iPhone/Release/MyEWSApp.exe into /Users/Projects/HelloMonoTouch/MyEWSApp/bin/iPhone/Release/MyEWSApp.app
Could not link assemblies: System.IO.FileNotFoundException: Could not resolve: System.DirectoryServices, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
  at Mono.Cecil.BaseAssemblyResolver.Resolve (Mono.Cecil.AssemblyNameReference name) [0x00000] in <filename unknown>:0 
  at Mono.Linker.AssemblyResolver.Resolve (Mono.Cecil.AssemblyNameReference name) [0x00000] in <filename unknown>:0 
  at Mono.Linker.LinkContext.Resolve (IMetadataScope scope) [0x00000] in <filename unknown>:0 
  at Mono.Linker.Steps.LoadReferencesStep.ProcessReferences (Mono.Cecil.AssemblyDefinition assembly) [0x00000] in <filename unknown>:0 
  at Mono.Linker.Steps.LoadReferencesStep.ProcessAssembly (Mono.Cecil.AssemblyDefinition assembly) [0x00000] in <filename unknown>:0 
  at Mono.Linker.Steps.BaseStep.Process (Mono.Linker.LinkContext context) [0x00000] in <filename unknown>:0 
  at Mono.Linker.Pipeline.Process (Mono.Linker.LinkContext context) [0x00000] in <filename unknown>:0 
  at MonoTouch.Tuner.Linker.Run (Mono.Linker.Pipeline pipeline, Mono.Linker.LinkContext context) [0x00000] in <filename unknown>:0 
mtouch exited with code 1

私は熱心に追加しました:

System.DirectoryServices.dll
System.Configuration.dll
System.Security.dll
System.DirectoryServices.Protocols.dll
System.EnterpriseServices.dll

正しい方向に進んでいないという感覚が高まっていましたが、mtouchがネイティブのSystem.EnterpriseServices.Wrapper.dllについて不満を言ったとき、私はあきらめました。

プロジェクトオプション/iPhoneビルドSDKおよびリンカーオプションを試してみました。

また、32ビットバージョンと64ビットバージョンの両方のMicrosoft.Exchange.WebServices.dllを試しました。

PSマネージドEWSAPIなしでEWSを使用できることは知っていますが、これらすべてのXML要求と応答を記述して解析するのは非常に面倒です。

4

2 に答える 2

1

MonoTouchのリンカーとAOTコンパイラの両方が、作業を行うときにすべての依存関係が存在する必要があります。それと、シンボル(タイプ、メソッドなど)が欠落していると、フレームワークの別のバージョンからビルド済みのバイナリを再利用することが難しくなります(ただし、完全に不可能ではありません)。

また、これがいつか(シンボルの欠落なしで)シミュレーターで機能する理由についても説明します。デフォルトでは、シミュレータービルドは「リンクしない」(リンカーなし)に設定され、JIT(AOTなし)が使用されます。これにより、欠落している参照/シンボルが(潜在的には)必要になるまで気付かれなくなります。

デバイスビルドのリンカーをオフにすることはできますが、それはAOTコンパイラの助けにはなりません。OTOHリンカーを満足させることができ、AOTコンパイラーに適切に機能させるのに十分なコードを削除できる可能性があります。悲しいことに、 System.EnterpriseServices.Wrapper.dllなどのネイティブコードに移行すると、オプションがはるかに制限されます。

于 2011-11-22T21:18:12.047 に答える
0

WindowsDLLをMonoTouchで使用することはできません。iOSアーキテクチャ用にコンパイルされていません。MonoTouch用に特別にコンパイルされたDLLが必要です。または、ソースがある場合は、自分でビルドできます。

于 2011-11-22T20:11:25.447 に答える