2 using System
.Threading
;
3 using System
.Reflection
;
4 using System
.Reflection
.Emit
;
8 public virtual void Foo
<T
> (int i
)
15 static AssemblyBuilder assembly
;
16 static ModuleBuilder module
;
17 static string ASSEMBLY_NAME
= "MonoTests.System.Reflection.Emit.TypeBuilderTest";
21 AssemblyName assemblyName
= new AssemblyName ();
22 assemblyName
.Name
= ASSEMBLY_NAME
;
25 Thread
.GetDomain ().DefineDynamicAssembly (
26 assemblyName
, AssemblyBuilderAccess
.RunAndSave
, ".");
28 module
= assembly
.DefineDynamicModule ("repro", "bug-462592-result.exe");
35 MethodInfo foo
= typeof (Test
).GetMethod ("Foo");
36 TypeBuilder type
= module
.DefineType ("TestType", TypeAttributes
.Public
, typeof (Test
), Type
.EmptyTypes
);
38 MethodBuilder mb
= type
.DefineMethod ("Foo", MethodAttributes
.Public
| MethodAttributes
.Virtual
, typeof (void), new Type
[] { typeof (int) }
);
39 mb
.DefineGenericParameters ("T");
41 ILGenerator il
= mb
.GetILGenerator ();
42 il
.Emit (OpCodes
.Ldarg_0
);
43 il
.Emit (OpCodes
.Ldc_I4
, 0);
44 il
.Emit (OpCodes
.Call
, foo
);
45 il
.Emit (OpCodes
.Ret
);
47 type
.DefineMethodOverride (mb
, foo
);
49 MethodBuilder main
= type
.DefineMethod ("Main", MethodAttributes
.Public
| MethodAttributes
.Static
, typeof (void), Type
.EmptyTypes
);
50 il
= main
.GetILGenerator ();
51 il
.Emit (OpCodes
.Newobj
, type
.DefineDefaultConstructor (MethodAttributes
.Public
));
52 il
.Emit (OpCodes
.Ldc_I4
, 0);
53 il
.Emit (OpCodes
.Callvirt
, mb
.MakeGenericMethod (new Type
[] { typeof (string) }
));
54 il
.Emit (OpCodes
.Ret
);
57 assembly
.SetEntryPoint (main
);
59 assembly
.Save ("bug-462592-result.exe");
61 Assembly res
= Assembly
.LoadFrom ("bug-462592-result.exe");
62 res
.EntryPoint
.Invoke (null, new object[0]);