其他分享
首页 > 其他分享> > 使用设备构建时,Monotouch在LINQ查询上崩溃

使用设备构建时,Monotouch在LINQ查询上崩溃

作者:互联网

这是我得到的错误:

| mscorlib | |在仅使用–aot的情况下尝试JIT编译方法’System.Linq.OrderedEnumerable`1:GetEnumerator()’.

从我看过的内容来看,在这种情况下,编译器似乎未包含方法“ GetEnumerator”,这是因为LINQ需要该代码.确保编译器将其包括在内的正确做法是什么?

我在网上找到的几乎所有遇到此问题的人都摆脱了linq查询,并继续生活,但是当这样的事情突然出现时,我厌倦了重新编写代码.另外,我不确定到底是哪个linq查询引起了问题,并且我正在慢慢遍历代码并重新编写所有linq查询,直到找到它为止.

解决方法:

并没有真正缺少GetEnumerator方法-但是在进入设备之前它不是AOT版本的.因此,JIT正在尝试在设备上进行编译.现在由于Apple的限制,MonoTouch(或其他任何工具)无法在设备上进行JIT代码编码(但可以在不存在此类限制的模拟器上使用).

那么真正的错误是什么:AOT编译器无法预测(并为其编译代码)这种(通用)类型.

找到问题的一种诀窍(比重写每个LINQ代码更容易)是编译C#代码,然后对程序集进行ildasm.接下来查找使用哪种方法OrderedEnumerable`1(LINQ可以很容易地隐藏东西).

一旦找到,您可能需要重写该部分,但是在某些情况下,您可以通过明显地将需要该类型(用’1表示)来“帮助” AOT编译器.

标签:aot,xamarin-ios,linq,iphone,c
来源: https://codeday.me/bug/20191102/1990654.html