我有一些.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
我做错了什么,拜托?
答案 0 :(得分:1)
我猜:i8
不被认为是与原生int相同的类型。如果要返回原生int,则中间需要conv.i
。本机int在64位平台上是8个字节,但在32位平台上只有4个字节。