Ошибка в CIL.Метод не найден: '?' - PullRequest
1 голос
/ 17 января 2012

Я пишу свой собственный компилятор для удовольствия xD. Он компилируется в CIL с использованием Mono.Cecil, и когда я декомпилирую его или смотрю на CIL, он выглядит нормально, однако, когда я запускаю его, я получаю аварийное завершение (исключение), заявляющее, что «Метод не найден: '?'".

Глядя на метод, в котором генерируется сбой (stacktrace показывает, какой метод), это CIL для данного метода:

.method public hidebysig virtual 
    instance class [Totem.Library]Totem.Library.TotemValue Execute () cil managed 
{
    IL_0000: callvirt class [Totem.Library]Totem.Library.TotemUndefined [Totem.Library]Totem.Library.TotemUndefined::get_Value()
    IL_0005: ret
}

Totem.Library - это внешняя DLL, написанная на C # (не скомпилирована с моим компилятором, и поэтому должна работать). Доступ к свойству (TotemUndefined.Value, статическое свойство) не имеет способа вызвать исключение (он просто возвращает одиночный объект, созданный в статическом конструкторе TotemUndefined).

И мне было интересно, что-то не так с этим CIL? Или требуется дополнительная информация для поиска проблемы (можно загрузить полный исходный код, всего на данный момент всего пара сотен строк).

1 Ответ

2 голосов
/ 17 января 2012

Вы используете callvirt для вызова статической функции.Это не сработает, просто используйте call.

...