using System;
using System.Reflection;
using System.Reflection.Emit;
class CodeGenerator {
Type t;
public static void Main() {
CodeGenerator codeGen = new CodeGenerator();
Type t = codeGen.T;
if (t != null) {
object o = Activator.CreateInstance(t);
MethodInfo helloWorld = t.GetMethod("HelloWorld");
if (helloWorld != null) {
// Run the HelloWorld Method
helloWorld.Invoke(o, null);
} else {
Console.WriteLine("Could not retrieve MethodInfo");
}
} else {
Console.WriteLine("Could not access the Type");
}
}
public CodeGenerator() {
AppDomain currentDomain = AppDomain.CurrentDomain;
AssemblyName assemName = new AssemblyName();
assemName.Name = "MyAssembly";
AssemblyBuilder assemBuilder = currentDomain.DefineDynamicAssembly(assemName, AssemblyBuilderAccess.Run);
ModuleBuilder moduleBuilder = assemBuilder.DefineDynamicModule("MyModule");
TypeBuilder typeBuilder = moduleBuilder.DefineType("MyClass",TypeAttributes.Public);
MethodBuilder methodBuilder = typeBuilder.DefineMethod("HelloWorld", MethodAttributes.Public,null,null);
ILGenerator msilG = methodBuilder.GetILGenerator();
msilG.EmitWriteLine("www.rntsoft.com");
msilG.Emit(OpCodes.Ret);
t = typeBuilder.CreateType();
}
public Type T {
get {
return this.t;
}
}
}