是否可以使用微软管理的EWS构建带有MonoTouch的iPhone应用程序?

是否可以使用微软管理的EWS构建带有MonoTouch的iPhone应用程序?,iphone,.net,ios,xamarin.ios,ews-managed-api,Iphone,.net,Ios,Xamarin.ios,Ews Managed Api,我正在尝试使用Microsoft EWS管理的API构建iOS应用程序。我已经从解决方案文件夹下载了msi并复制了DLL。 为模拟器构建时,它构建并运行良好,但当尝试以物理设备为目标时,mtouch会失败,原因是: Compiling to native code /Developer/MonoTouch/usr/bin/mtouch -v --nomanifest --nosign -dev "/Users/Projects/HelloMonoTouch/MyEWSApp/bin/iPhone

我正在尝试使用Microsoft EWS管理的API构建iOS应用程序。我已经从解决方案文件夹下载了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
我越来越觉得自己没有走上正轨,但当mtouch抱怨native System.enterpriseseservices.Wrapper.dll时,我放弃了

我尝试过使用项目选项/iphonebuildsdk和链接器选项

我还尝试了Microsoft.Exchange.WebServices.dll的32位和64位版本


另外,我知道我可以在没有托管EWS API的情况下使用EWS,但是编写和解析所有这些XML请求和响应是一件非常痛苦的事情

不能将Windows DLL与MonoTouch一起使用-它不是针对iOS体系结构编译的。您必须拥有专门为MonoTouch编译的DLL,或者如果您有源代码,您可以自己构建它。

MonoTouch的链接器和AOT编译器在工作时都需要所有依赖项。这一点以及缺少的符号(类型、方法…)使得很难(但并非完全不可能)重用来自另一版本框架的预构建二进制文件

它还解释了为什么有时(没有丢失符号)可以在模拟器上工作。默认情况下,模拟器构建设置为“不链接”(无链接器),并使用JIT(无AOT)。这使得丢失的引用/符号不被注意。。。直到(可能永远)需要它们


您可以关闭设备生成的链接器,但这对AOT编译器没有帮助。o您可以尝试以满足链接器的要求,并且它可以删除足够多的代码以使AOT编译器正常工作。遗憾的是,当使用本机代码时,例如System.EnterpriseServices.Wrapper.dll,您的选择就变得非常有限了。

抱歉,但事实并非如此。我在MonoDevelop中引用了许多在Visual Studio中从源代码构建的程序集,是的,它们适用于模拟器和iPhone。你确定吗?来自MT FAQ—“要使用MonoTouch重用现有的.NET代码,必须使用MonoTouch的编译器和基本程序集重新编译库。”()是的,我是肯定的。但我怀疑我的测试程序集过于简单和通用。。。我希望有办法欺骗链接器,因为模拟器工作正常,即使Microsoft.Exchange.WebServices引用本机DLL
System.DirectoryServices.dll
System.Configuration.dll
System.Security.dll
System.DirectoryServices.Protocols.dll
System.EnterpriseServices.dll