Я использую компилятор MS C# для компиляции таких методов:
[Placeholder] public extern void Method();
Скомпилированный метод имеет RVA = 0
(относительный виртуальный адрес).
Затем с помощью Mono.Cecil 0.9.3 я хочу заполнить для него тело метода.
Я делаю это так:
methodDefinition.Body = new MethodBody(methodDefinition);
// emit code...
Однако при попытке сохранить сборку я получаю сообщение об ошибке:
System.NullReferenceException: Object reference not set to an instance of an object.
at Mono.Cecil.Cil.CodeReader.IsInSection(Int32 rva)
at Mono.Cecil.Cil.CodeReader.MoveTo(Int32 rva)
at Mono.Cecil.Cil.CodeReader.PatchRawMethodBody(MethodDefinition method, CodeWriter writer, MethodSymbols& symbols)
at Mono.Cecil.Cil.CodeWriter.WriteUnresolvedMethodBody(MethodDefinition method)
at Mono.Cecil.Cil.CodeWriter.WriteMethodBody(MethodDefinition method)
Как я могу заставить его работать?