【问题标题】:Invalid IL code IL_0038: newobj in MonoTouch无效的 IL 代码 IL_0038:MonoTouch 中的 newobj
【发布时间】:2012-07-25 16:58:15
【问题描述】:

在 MonoTouch 下,以下代码行编译,但生成 InvalidProgramException:

var bytes = new byte[,]{};

System.InvalidProgramException
Invalid IL code in Foo: IL_0038: newobj 0x0a000012

但是,以下操作在运行时不会失败:

var bytes = new byte[,]{{}};

我可以使用第二个表达式。但是,第一个有什么问题吗?如果是这样,它不应该编译失败吗?

【问题讨论】:

  • 这看起来像是内存损坏,但很难判断,因为细节将在 unsafe 块中使用的(未提供的)参数/变量中。你能提供更多细节吗?包括哪一行抛出这个异常?
  • 您是否尝试过在程序集上运行 PEVerify?
  • 经过调查,我找到了罪魁祸首。调试器不会进入带有违规行的方法。我已经更新了问题。

标签: mono xamarin.ios interop il


【解决方案1】:

这似乎是 MonoTouch 中 C# 编译器中的一个错误,它编译表达式不正确。

如果我尝试使用更新的 C# 编译器(从 Mono 2.12 开始),表达式会正确编译并且生成的程序可以工作。

目前 MonoTouch 的计划是在今年秋天晚些时候开始使用 Mono 2.12,如果它对您来说是一个障碍,您可以open a bug report 看看修复是否可以使其成为早期版本的 MonoTouch。

【讨论】:

  • 这对我来说不是障碍,所以我会等待自然顺其自然。感谢您尝试使用新版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多