Как предоставить тело метода для внешнего метода с помощью Mono.Cecil

Я использую компилятор 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)

Как я могу заставить его работать?


person Jordão    schedule 25.06.2011    source источник
comment
Вы должны начать с обновления до Mono.Cecil 0.9.5.   -  person Jb Evain    schedule 26.06.2011
comment
@Jb Эвейн: Хорошо, я сделаю это.   -  person Jordão    schedule 26.06.2011
comment
@Jb Эвейн: Это сработало! Мне стыдно! Спасибо за отличную библиотеку. Взгляните на NRoles, чтобы узнать, как я это использовал.   -  person Jordão    schedule 27.06.2011
comment
нет проблем, рад, что это работает для вас.   -  person Jb Evain    schedule 27.06.2011


Ответы (1)


Мне стыдно говорить, что решение состояло в том, чтобы просто обновить Mono.Cecil до версии 0.9.5.

person Jordão    schedule 27.06.2011