0

我有一些生成程序集然后运行它的.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: Invalid IL code in HelloWorldType:Main (): IL_0009: ret

请问我做错了什么?

4

1 回答 1

1

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

于 2013-08-08T19:52:14.597 回答