2011-11-22 41 views
3

我正在嘗試使用Microsoft EWS託管API來構建iOS應用程序。我已經從http://www.microsoft.com/download/en/details.aspx?id=13480下載了msi,並將該DLL複製到解決方案文件夾下。 建立用於模擬器,它建立並運行良好,但努力的目標物理設備時,mTouch觸摸失敗:使用Microsoft託管的EWS,可以使用MonoTouch構建iPhone應用程序嗎?

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和鏈接器選項。

我也試過Microsoft.Exchange.WebServices.dll

的32位和64位版本

附:我知道我可以在不使用託管EWS API的情況下使用EWS,但編寫和解析所有這些XML請求和響應非常痛苦。

回答

1

MonoTouch的鏈接器和AOT編譯器在工作時都需要所有的依賴關係。那些缺少的符號(類型,方法...)使得從另一個版本的框架中重用預構建的二進制文件變得困難(但並非完全不可能)。

它也解釋了爲什麼有時候(不會丟失符號)在模擬器上工作。默認情況下,模擬器版本設置爲「不要鏈接」(無鏈接器)和JIT(不使用AOT)。這可以讓遺漏的引用/符號不被注意到......直到它們(可能從未)被需要。

您可以關閉設備構建的鏈接器 - 但這對AOT編譯器不起作用。 OTOH你可以嘗試以滿足鏈接器,它可以可能能夠刪除足夠的代碼,讓AOT編譯器正常工作。遺憾的是,當事情歸結爲本地代碼時,如System.EnterpriseServices.Wrapper.dll,您的選擇變得更加有限。

0

您不能在MonoTouch上使用Windows DLL--它不是爲iOS架構編譯的。你必須有一個專門爲MonoTouch編譯的DLL,或者如果你有源代碼,你可以自己構建它。

+1

對不起,但那不是真的。我在MonoDevelop中引用了很多源自Visual Studio的程序集,是的,它們適用於Simulator和iPhone。 – Nina

+1

你確定嗎?從MT常見問題解答 - 「爲了在MonoTouch中重新使用現有的.NET代碼,您必須使用MonoTouch的編譯器和基礎程序集重新編譯您的庫。」 (http://support.xamarin.com/customer/portal/articles/136796-can-i-use-standard-desktop-mono-assemblies-or-net-assemblies-with-monotouch-) – Jason

+0

是的,我是正。但我懷疑我的測試程序集太簡單和通用了......我希望有一些方法可以欺騙鏈接程序,因爲即使Microsoft.Exchange.WebServices引用本機DLL,Simulator也能正常工作 – Nina

相關問題