2012-07-25 65 views
3

下的MonoTouch的下面一行代码编译,但生成一个InvalidProgramException:无效IL代码IL_0038:newobj在MonoTouch的

var bytes = new byte[,]{}; 

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

但是,下面的不运行时失败:

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

我很好,用第二个表达式。但是,第一个有什么问题吗?如果是这样,它不应该不能编译?

+0

这看起来像内存损坏,但很难说,因为详细信息将存在于不安全块中使用的(未提供的)参数/变量中。你能提供更多细节吗?包括哪一行引发此异常? – poupou 2012-07-25 17:16:34

+1

您是否尝试过在组件上运行PEVerify? – svick 2012-07-25 17:44:21

+0

经过调查,我发现罪魁祸首的表达。调试器不会采用有问题的方法进入方法。我已经更新了这个问题。 – 2012-07-25 17:47:32

回答

8

这看起来像是MonoTouch中C#编译器中的一个错误,它会错误地编译表达式。

如果我尝试使用更新的C#编译器(来自Mono 2.12),表达式会被正确编译并生成程序。

当前的计划是让MonoTouch在今年秋天晚些时候开始使用Mono 2.12,如果它是对您的拦截器,您可以open a bug report来查看修复是否可以将其应用到早期版本的MonoTouch。

+0

这不是我的阻挡者,所以我会等待大自然的发展。感谢您试用新版本。 – 2012-07-25 18:31:19

相关问题