【问题标题】:Xamarin 4 issue: iOS AOT problems which are not present in Xamarin 3. What is the solution?Xamarin 4 问题:Xamarin 3 中不存在的 iOS AOT 问题。解决方案是什么?
【发布时间】:2016-03-08 16:23:41
【问题描述】:

我在 Mac 和最新的 Xamarin 3 上使用最新的 Xamarin 4 工具(Xamarin Studio 5.10.1、Xamarin iOS 9.2.1、Mono MDK 4.2.1)构建了完全相同的代码库(Xamarin Studio 5.9.8.0、Xamarin.iOS 9.1.0.31、Mono MDK 4.0.5.1) 工具。

Xamarin 3 构建工作正常,Xamarin 4 不行。下面是 MS ADAL 库产生的 AOT 问题:

System.ExecutionEngineException: Attempting to JIT compile method 
'(wrapper runtime-invoke) <Module>:runtime_invoke_bool_Nullable`1<DateTimeOffset> (object,intptr,intptr,intptr)' 
while running with --aot-only. 
See http://docs.xamarin.com/ios/about/limitations for more information.

还有完整的堆栈跟踪:

System.Reflection.MonoMethod.Invoke(object obj, BindingFlags invokeAttr, Binder binder, object[] parameters, CultureInfo culture)
System.Reflection.MethodBase.Invoke(object obj, object[] parameters)
System.Runtime.Serialization.Json.JsonFormatWriterInterpreter.UnwrapNullableObject(Func<_> memberValue, ref Type memberType, ref bool isNull)
System.Runtime.Serialization.Json.JsonFormatWriterInterpreter.WriteValue(Type memberType, object memberValue)
System.Runtime.Serialization.Json.JsonFormatWriterInterpreter.WriteMembers(ClassDataContract classContract, ExtensionDataObject extensionData, ClassDataContract derivedMostClassContract)
System.Runtime.Serialization.Json.JsonFormatWriterInterpreter.WriteClass(ClassDataContract classContract)
System.Runtime.Serialization.Json.JsonFormatWriterInterpreter.WriteToJson(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContextComplexJson context, ClassDataContract dataContract, XmlDictionaryString[] memberNames)
System.Runtime.Serialization.Json.JsonFormatWriterGenerator.CriticalHelper.<GenerateClassWriter>c__AnonStorey0.<>m__0(XmlWriterDelegator xmlWriter, object obj, XmlObjectSerializerWriteContextComplexJson context, ClassDataContract dataContract, XmlDictionaryString[] memberNames)
System.Runtime.Serialization.Json.JsonClassDataContract.WriteJsonValueCore(XmlWriterDelegator jsonWriter, object obj, XmlObjectSerializerWriteContextComplexJson context, RuntimeTypeHandle declaredTypeHandle)
System.Runtime.Serialization.Json.JsonDataContract.WriteJsonValue(XmlWriterDelegator jsonWriter, object obj, XmlObjectSerializerWriteContextComplexJson context, RuntimeTypeHandle declaredTypeHandle)
System.Runtime.Serialization.Json.DataContractJsonSerializer.WriteJsonValue(JsonDataContract contract, XmlWriterDelegator writer, object graph, XmlObjectSerializerWriteContextComplexJson context, RuntimeTypeHandle declaredTypeHandle)
System.Runtime.Serialization.Json.XmlObjectSerializerWriteContextComplexJson.WriteDataContractValue(DataContract dataContract, XmlWriterDelegator xmlWriter, object obj, RuntimeTypeHandle declaredTypeHandle)
System.Runtime.Serialization.XmlObjectSerializerWriteContext.SerializeWithoutXsiType(DataContract dataContract, XmlWriterDelegator xmlWriter, object obj, RuntimeTypeHandle declaredTypeHandle)
System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerialize(XmlWriterDelegator xmlWriter, object obj, bool isDeclaredType, bool writeXsiType, int declaredTypeID, RuntimeTypeHandle declaredTypeHandle)
System.Runtime.Serialization.XmlObjectSerializerWriteContextComplex.InternalSerialize(XmlWriterDelegator xmlWriter, object obj, bool isDeclaredType, bool writeXsiType, int declaredTypeID, RuntimeTypeHandle declaredTypeHandle)
System.Runtime.Serialization.XmlObjectSerializerWriteContext.InternalSerializeReference(XmlWriterDelegator xmlWriter, object obj, bool isDeclaredType, bool writeXsiType, int declaredTypeID, RuntimeTypeHandle declaredTypeHandle)
System.Reflection.MonoMethod.InternalInvoke(MonoMethod, object, object[], ref Exception)(wrapper managed-to-native)
System.Reflection.MonoMethod.Invoke(object obj, BindingFlags invokeAttr, Binder binder, object[] parameters, CultureInfo culture)
Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext.<AcquireTokenCommonAsync>d__68.MoveNext()
Microsoft.IdentityModel.Clients.ActiveDirectory.AuthenticationContext.<AcquireTokenAsync>d__4b.MoveNext()

我将不胜感激任何建设性的解释发生了什么变化,以及为什么这个东西不再起作用。

这是否与某些 Mono 实现更改或某些奇怪的 mtouch 行为有关?

【问题讨论】:

  • Gabor 我和你有同样的问题,你能解决吗?
  • @Fran_gg7,不,我只是恢复到工具集的先前版本(但如果你发现问题相关,你可以投票赞成这个问题)。正如 poupou 指出的,这可能是一个错误,所以我会尽快报告。

标签: ios xamarin xamarin.ios mono-mdk


【解决方案1】:

解决方案:请在http://bugzilla.xamarin.com 上提交错误报告以及测试用例。 stackoverflow 上的任何人都不太可能帮助解决此类特定问题。

为什么?从 Mono 代码(在 XI 9.1 中使用 mono 4.0)到 MS RS 代码(在 mono 4.2 和 XI 9.2 中使用的开源 .NET BCL)可能会遇到 AOT 编译器无法处理的情况。

测试用例将帮助我们识别和修复该代码。更重要的是,它还为我们的单元测试提供了很好的补充(以确保进一步的更改不会再次破坏它)。

【讨论】:

    【解决方案2】:

    我遇到了同样的问题。花费大量时间后,我发现我的项目文件中缺少 app.config。将该文件添加到我的项目中解决了该问题。让我知道这是否有效!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-13
      • 2018-10-25
      • 2022-11-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-17
      • 1970-01-01
      相关资源
      最近更新 更多