[Mono-dev] Re: emitting a MethodInfo instance

Valient Gough valient at gmail.com
Fri Aug 12 11:37:38 EDT 2005


Adding a followup for list-archive completeness. 

On 5/31/05, Valient Gough <valient at gmail.com> wrote:

> Forgot to add, my first guess was actually to use OpCode.Ldtoken to
> directly load MethodInfo

> However, when I try and emit (OpCode.Ldtoken, MethodInfo), that causes
> the ILGenerator to halt in mid-opcode, and monodis shows that last
> opcode as "ldtoken" with no args..  Perhaps ILGenerator.Emit(OpCode,
> MethodInfo) only works in mono 1.1.7 where OpCode == OpCode.Call* ?

Mono is able to emit the code, but monodis can't seem to decompile it.
Ref bug #75544: http://bugzilla.ximian.com/show_bug.cgi?id=75544

The following code will emit a MethodInfo reference into IL code, and
the code will work fine, but it will render the resulting .dll
undecodable by monodis:

void Emit_MethodInfo(ILGenerator ig, MethodInfo method)
{
    ig.Emit( OpCodes.Ldtoken, method ); // this crashes monodis
    ig.Emit( OpCodes.Call, 
             typeof(MethodBase).GetMethod("GetMethodFromHandle");
    ig.Emit( OpCodes.Castclass, typeof(MethodInfo) );
}



More information about the Mono-devel-list mailing list