如何使用monotouch编译库(获取错误:尝试使用--aot-only进行JIT编译)

时间:2011-03-13 10:11:50

标签: .net iphone mono xamarin.ios

我正在尝试在单项目项目中使用 DotNetZip http://dotnetzip.codeplex.com/)。

我已经为 monotouch 重新编译了它,在MonoDevelop下创建了两个新的monotouch项目(一个用于ZLib,另一个用于DotNetZip),将代码放入其中,删除引用Windows Forms的代码,并在项目选项中设置编译目标 =

在编译之前,我将MonoDevelop中的活动配置设置为“Release - iPhone”。

然后,我在主要的monotouch项目中引用了生成的DLL。

在模拟器中运行时工作正常,但是当我尝试在实际设备上调试它时(在我的情况下是iPod Touch 4),我在运行时遇到错误:

抛出了System.ExecutionEngineException

在使用--aot-only运行时尝试JIT编译方法'Vortaro.SearchTableViewSource:.ctor(Vortaro.SearchViewController)'。

这就发生在这一行:

using (ZipFile zip = ZipFile.Read ("dictionary.zip")) {

-

我还测试了一个简单的例子,只有在点击一个按钮时才这样做:

ZipFile.Read ("dictionary.zip");

我收到此错误:

未处理的异常:System.ExecutionEngineException: 在使用--aot-only运行时尝试JIT编译方法'Ionic.Zip.ZipContainer:.ctor(object)'。

中的Ionic.Zip.ZipEntry.ReadDirEntry(Ionic.Zip.ZipFile zf)[0x000b5]

当我查看错误指向的构造函数时,我看不到任何可能导致JIT编译的内容:

public ZipContainer(Object o)
{
    _zf = (o as ZipFile);
    _zos = (o as ZipOutputStream);
    _zis = (o as ZipInputStream);
}

1 个答案:

答案 0 :(得分:1)

这是iOS强加的限制:无法在deman上生成代码。所以你需要解决的问题是为什么你的代码试图JIT编译Vortaro.SearchTableViewSource.ctor,这可能是因为你有一个使用它的泛型类型,或者你正在调用Type.GetType()< / p>

该错误看起来不像来自dotnetzip库,而是看起来它来自您的代码(请参阅类型名称)