using System;
using System.Collections.Generic;
using System.Text;
using System.Reflection;
using System.Reflection.Emit;
using System.IO;
namespace Emit
{
class Program
{
static void Main(string[] args)
{
ILGenerator il = null;
string moduleName;
moduleName = "Mod1.exe";
AssemblyName name = new AssemblyName(Path.GetFileNameWithoutExtension(moduleName));
AssemblyBuilder asmb = System.AppDomain.CurrentDomain.DefineDynamicAssembly(name, AssemblyBuilderAccess.Save);
ModuleBuilder modb = asmb.DefineDynamicModule(moduleName);
TypeBuilder typeb = modb.DefineType("Foo");
MethodBuilder methb = typeb.DefineMethod("Main", MethodAttributes.Static, typeof(void), System.Type.EmptyTypes);
il = methb.GetILGenerator();
LocalBuilder lb = il.DeclareLocal(typeof(object));
il.Emit(OpCodes.Newobj, typeof(object).GetConstructor(Type.EmptyTypes));
il.Emit(OpCodes.Stloc_0);
il.Emit(OpCodes.Ldloc_0);
il.Emit(OpCodes.Call, typeof(Console).GetMethod("WriteLine", new Type[] { typeof(object) }));
il.Emit(OpCodes.Ret);
typeb.CreateType();
modb.CreateGlobalFunctions();
asmb.SetEntryPoint(methb);
asmb.Save(moduleName);
il = null;
}
}
}