这是我得到的错误:
| mscorlib | |在使用--aot-only运行时尝试JIT编译方法'System.Linq.OrderedEnumerable`1:GetEnumerator()'。
从我读过的内容来看,编译器在这种情况下不包含一个方法“GetEnumerator”,代码需要LINQ。确保编译器包含它的正确做法是什么?
几乎所有遇到过我在网上发现的人只是摆脱了linq查询并继续生活,但我厌倦了在这样的事情出现时重新编写我的代码。此外,我不确定究竟哪个linq查询引起了问题,我正在慢慢浏览我的代码并重新编写所有linq查询,直到找到它为止。
答案 0 :(得分:3)
GetEnumerator方法并没有真正丢失 - 但在进入设备之前它没有AOT-ed 。所以JIT正试图在设备上编译它。现在由于Apple的限制,MonoTouch(或其他任何东西)无法在设备上使用JIT代码(但这样可以在没有此类限制的模拟器上运行)。
那么真正的错误是什么:它是AOT编译器无法预测的(通用)类型帽子(并为其编译代码)。
找到问题的技巧(比重写每个LINQ代码更容易)是编译C#代码然后ildasm程序集。接下来找到正在使用OrderedEnumerable`1的方法(LINQ可以非常容易地隐藏)。
一旦找到,可能需要重写该部分,但在某些情况下,您可以“帮助”AOT编译器,更明显的是需要类型(由`1表示)
答案 1 :(得分:1)
#17号是否可以帮助您链接?
http://ios.xamarin.com/Documentation/Troubleshoot
“System.ExecutionEngineException:尝试JIT编译方法(托管者托管到托管)Foo []:System.Collections.Generic.ICollection`1.get_Count()”
你可能需要“破解”一个解决方法来解决这个问题,遗憾的是 - 但这是可以修复的。你能用实际的LINQ查询来更新你的问题吗?
答案 2 :(得分:0)
找到了令人讨厌的代码行:
// currentDates is a List<DateTime>
return (from dt in currentDates orderby dt.Date ascending select dt).ToList();
我将其改为使用
CurrentDates.Sort()
并且避免调用未获得AOT编辑的GetEnumerator。不再爆炸。