运行montouch应用程序时出现JIT / AOT问题

时间:2011-09-25 20:37:16

标签: iphone ios mono xamarin.ios jit

我几周来一直在开发一个monotouch opengl iphone游戏。就在昨天,它正在我的测试硬件(iPhone 4)上正常构建和运行。但是当我昨天加载项目时,它给了我编译错误:

Framework 'Mono for iPhone' not Installed.

我想不出任何理由,我没有改变我的系统或源代码。幸运的是,Monodevelop已经通过最新api下载的下载链接来骚扰我。我安装了,错误就消失了。但相反,我现在在应用程序启动时遇到运行时错误http://screencast.com/t/EXyNqqhNoEsu

System.ExecutionEngineException has been thrown. Attempting to JIT compile method ... FirstOrDefault ... while running with --aot-only. 

尝试创建新的DataContractSerializer以加载某些XML设置时会发生这种情况:http://screencast.com/t/4SDzU5ygg

这迫使我第一次在应用程序的项目选项下更改链接器行为设置。它被设置为“不要链接”,就像它一样。当我切换到'仅限链接SDK程序集'时,它运行时没有上述异常。

这很好,问题解决了,除了在这种模式下编译和部署到手机需要将近半个小时(!)。构建输出位于“仅用于汇编的链接SDK ...”。这是正常的吗?我不认为我可以在很长时间内保持理智。即使是“不要链接”也需要大约五分钟,这在您尝试排除故障时是一个艰苦的步伐。

重申一下,这是几周来每天工作的代码,据我所知,并没有从其工作状态改变。有谁知道为什么现在发生这个错误,以及继续使用“不要链接”选项可能会有什么决议?

1 个答案:

答案 0 :(得分:0)

  

未安装“Mono for iPhone”框架。

由于某些原因,MonoDevelop无法找到您的MonoTouch安装。我不能说为什么,但重新启动MonoDevelop并检查 SDK位置的MD首选项(如果找不到MonoTouch则修复路径)将是尝试的最佳选择。

  

抛出了System.ExecutionEngineException。尝试使用JIT编译方法... FirstOrDefault ...使用--aot-only运行时。

当选择“不链接”链接器选项时,

MonoTouch 4.2 [.1]有时会抛出 ExecutionEngineException 。此bug已修复,将成为未来MonoTouch版本的一部分。

FWIW 链接SDK程序集是默认设置,应始终使用进行设备构建。链接器将生成更小的应用程序,并且在大多数情况下它还允许更快的构建(因为链接器可以比AOT编译器处理100kb的速度快100kb)。

如果遇到链接器需要很长时间的情况,那么项目中出现错误(或至少是奇怪的)。请花点时间填写http://bugzilla.xamarin.com的错误报告,以便我们调查为什么这需要这么长时间。