Можно ли создать приложение для iPhone с MonoTouch, используя EWS, управляемый Microsoft? - PullRequest
3 голосов
/ 22 ноября 2011

Я пытаюсь создать приложение для iOS, используя управляемый API Microsoft EWS. Я скачал MSI из http://www.microsoft.com/download/en/details.aspx?id=13480 и скопировал 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, я сдался.

Я пытался поиграть с опциями Project / iPhone build SDK и Linker.

Я также пробовал 32-битную и 64-битную версии Microsoft.Exchange.WebServices.dll

P.S. Я знаю, что мог бы использовать EWS без API Managed EWS, но написание и анализ всех этих XML-запросов и ответов является такой болью.

Ответы [ 2 ]

1 голос
/ 23 ноября 2011

Как компоновщику MonoTouch, так и компилятору AOT необходимы все зависимости, которые должны присутствовать при выполнении их работы.Это и отсутствие символов (типов, методов ...) затрудняет (но не полностью исключает) повторное использование предварительно собранных двоичных файлов из другой версии платформы.

Это также объясняет, почему это можеткогда-нибудь (без пропущенных символов) работать на симуляторе.По умолчанию для сборок симулятора установлено значение «Не связывать» (без компоновщика) и используется JIT (без AOT).Это позволяет пропущенным ссылкам / символам оставаться незамеченными ... до тех пор, пока они (возможно, никогда) не понадобятся.

Вы можете отключить компоновщик для сборок устройств - но это не поможет компилятору AOT.OTOH вы можете попробовать , чтобы удовлетворить компоновщик, и он сможет удалить достаточно кода, чтобы компилятор AOT работал правильно.К сожалению, когда дело доходит до нативного кода, такого как System.EnterpriseServices.Wrapper.dll , ваши возможности становятся намного более ограниченными.

0 голосов
/ 23 ноября 2011

Нельзя использовать Windows DLL с MonoTouch - она ​​не скомпилирована для архитектуры iOS. У вас должна быть либо библиотека DLL, которая была скомпилирована специально для MonoTouch, либо, если у вас есть источник, вы можете создать ее самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...