Я пишу свой собственный компилятор для удовольствия 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? Или требуется дополнительная информация для поиска проблемы (можно загрузить полный исходный код, всего на данный момент всего пара сотен строк).