2013-08-08 3 views
0

У меня есть некоторый .net-код, который генерирует сборку и запускает ее. Он работал надежно под .net в течение некоторого времени. В Mono код работает с некоторыми нетривиальными экземплярами, но на других он умирает с незаконным исключением IL.Тривиальный бит IL не работает в Mono

При попытке изолировать проблему я разрезал ее до точки, где он просто возвращает собственный int. Пример работает отлично под .net и умирает под Mono. Отражатель говорит код выглядит следующим образом, и это, как ожидается:

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

Исключение я получаю: System.InvalidProgramException: Invalid IL-код в HelloWorldType: Main(): IL_0009: RET

Что я Я делаю неправильно, пожалуйста?

+0

Запустите PEVerify на выходе. – leppie

+0

Он ничего не говорит и возвращает rc 0 (хотя я не запускаю код, вызывая сборку, он запускается сразу после того, как он сгенерирован тем же кодом, который сгенерировал его). –

ответ

1

Я бы предположил: i8 не считается тем же самым типом, что и родной int. Если вы хотите вернуть собственный int, вам понадобится conv.i посередине. Нативный int составляет 8 байтов на 64-битной платформе, но только 4 байта на 32-битной платформе.

+0

Хорошее место; p Моно лаконично, , – leppie

+0

Большое спасибо. Теперь у меня есть только оригинальная проблема: –

Смежные вопросы