using System.Reflection.Emit;
public static void Main()
AssemblyBuilder assemBuilder = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName() { Name = "DynamicAssembly" }, AssemblyBuilderAccess.Run);
TypeBuilder main_builder = assemBuilder.DefineDynamicModule("DynamicModule").DefineType("Main", TypeAttributes.Public);
TypeBuilder a_builder = main_builder.DefineNestedType("A", TypeAttributes.NestedPublic);
TypeBuilder b_builder = main_builder.DefineNestedType("B", TypeAttributes.NestedPublic, a_builder);
var a_constr = a_builder.DefineDefaultConstructor(MethodAttributes.Public);
var b_cnstr = b_builder.DefineConstructor(MethodAttributes.Public, CallingConventions.Standard, Type.EmptyTypes);
var il_gen = b_cnstr.GetILGenerator();
il_gen.Emit(OpCodes.Ldarg_0);
il_gen.Emit(OpCodes.Call, a_constr);
il_gen.Emit(OpCodes.Ret);
main_builder.CreateType();
Console.WriteLine("done");