我正在使用安装了 iOS 6.4.4 更新的 Xamarin (MAC)。我的触摸项目使用启用了 HttpClient 的 PCL 库。每次我执行使用 HttpClient 的方法时,我都会收到以下运行时错误:
System.ExecutionEngineException: Attempting to JIT compile method '(wrapper delegate-invoke) <Module>:invoke_void__this___HttpWebRequest_long (System.Net.HttpWebRequest,long)' while running with --aot-only. See http://docs.xamarin.com/ios/about/limitations for more information.
at System.Lightup.Call[HttpWebRequest,Int64] (System.Delegate& storage, System.Net.HttpWebRequest instance, System.String methodName, Int64 parameter) [0x00000] in <filename unknown>:0
at System.Lightup.Set[HttpWebRequest,Int64] (System.Delegate& storage, System.Net.HttpWebRequest instance, System.String propertyName, Int64 value) [0x00000] in <filename unknown>:0
at System.Net.HttpWebRequestLightup.SetContentLength (System.Net.HttpWebRequest instance, Int64 value) [0x00000] in <filename unknown>:0
at System.Net.Http.HttpWebRequest.set_ContentLength (Int64 value) [0x00000] in <filename unknown>:0
at System.Net.Http.HttpClientHandler.StartRequest (System.Object obj) [0x00000] in <filename unknown>:0
我该如何解决这个问题?
最佳答案
我知道我迟到了将近 3 年 :) 但今天我遇到了这个问题。现在支持 PCL,因此我认为向这个问题添加一些附加信息可能会有所帮助。
如果您在 PCL 项目中引用 System.Net.Http,例如使用 Microsoft.Net.Http NuGet 包,则您还必须将该引用添加到您的 iOS 项目中。您也可以通过在您的 iOS 项目上安装此 NuGet 包来简单地完成此操作。
这将强制 iOS 项目使用 System.Net.Http dll 的 Mono iOS 版本,而不是 PCL 的变体,它可能是 net45 或类似的东西。
我认为出现这个问题是因为 System.Net.Http 的 net45 变体使用反射来调用一些方法。请注意,该错误指出已尝试执行某些调用,并且这需要 JIT 编译。然而,这在 iOS 物理设备上是被禁止的,而不是在 iOS 模拟器上。 iOS物理设备需要Ahead of Time(aot)编译。
Attempting to JIT compile method '(wrapper delegate-invoke) <Module>:invoke_callvirt_void_HttpWebRequest_bool (System.Net.HttpWebRequest,bool)'
关于ios - HttpClient执行运行时错误: ExecutionEngineException - Attempting to JIT compile method with --aot-only,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18669339/