IL的琐碎位在Mono下不起作用

时间:2013-08-08 19:45:14

标签: mono

我有一些.net代码生成一个程序集然后运行它。它在.net下可靠地工作了一段时间。在Mono下,代码适用于一些非平凡的实例,但在其他情况下,它会因非法的IL异常而死亡。

当试图隔离问题时,我将其剪切到只返回原生int的程度。该示例在.net下工作正常,在Mono下死亡。 Reflector说代码如下,这是预期的:

.method public hidebysig static native int Main() cil managed
{
    .maxstack 8
    L_0000: ldc.i8 4
    L_0009: ret 
}

我得到的异常是:System.InvalidProgramException:HelloWorldType中的IL代码无效:Main():IL_0009:ret

我做错了什么,拜托?

1 个答案:

答案 0 :(得分:1)

我猜:i8不被认为是与原生int相同的类型。如果要返回原生int,则中间需要conv.i。本机int在64位平台上是8个字节,但在32位平台上只有4个字节。