这是我得到的错误:
| mscorlib | |在使用 --aot-only 运行时尝试 JIT 编译方法 'System.Linq.OrderedEnumerable`1:GetEnumerator ()'。
从我读到的内容看来,编译器在本例中不包含“GetEnumerator”方法,而代码由于 LINQ 的原因需要该方法。确保编译器包含它的正确做法是什么?
我在网上找到的几乎所有遇到此问题的人都摆脱了 linq 查询并继续生活,但当出现类似的情况时,我厌倦了重写我的代码。另外,我不确定到底是哪个 linq 查询导致了问题,我正在慢慢地检查我的代码并重写所有 linq 查询,直到找到它。
GetEnumerator 方法并没有真正丢失 - 但它不是 AOT edbefore进入设备。所以 JIT 正在尝试在设备上编译它。现在,由于 Apple 的限制,MonoTouch(或其他任何东西)无法在设备上进行 JIT 代码(但这将在不存在此类限制的模拟器上运行)。
那么真正的错误是什么:AOT 编译器无法预测(并为其编译代码)的(通用)类型。
找到问题的一个技巧(比重写每个 LINQ 代码更容易)是编译 C# 代码,然后对程序集进行 ildasm。接下来查找正在使用哪些方法 OrderedEnumerable`1(LINQ 可以非常轻松地隐藏内容)。
一旦找到你might需要重写该部分,但在某些情况下,您可以通过使需要的类型(由 `1 表示)更加明显来“帮助”AOT 编译器。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)