public static void CreatAssembly()
{
AssemblyName MyAssemblyName = new AssemblyName("AssemblyName");
AssemblyBuilder MyAssemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(MyAssemblyName, AssemblyBuilderAccess.RunAndSave);
ModuleBuilder MyModuleBuilder = MyAssemblyBuilder.DefineDynamicModule("MyModule", "MyModule.dll");//创建模块
TypeBuilder MyType = MyModuleBuilder.DefineType("MyClass", TypeAttributes.Public);//创建类型(类)
MethodBuilder MyMethodBuilder = MyType.DefineMethod("AddAB", MethodAttributes.Public, typeof(string), new Type[] { typeof(int), typeof(int) });//创建方法
#region 实现方法
ILGenerator MyMethod = MyMethodBuilder.GetILGenerator();
MyMethod.Emit(OpCodes.Ldarg_1);//参数1压入堆栈
MyMethod.Emit(OpCodes.Ldc_I4_1);//将int32的1压入堆栈中
MyMethod.Emit(OpCodes.Add);//
MyMethod.Emit(OpCodes.Ldarg_2);//参数2压入堆栈
MyMethod.Emit(OpCodes.Add);
MyMethod.Emit(OpCodes.Call, typeof(Convert).GetMethod("ToString", new Type[] { typeof(int) }));//把堆栈中的值传Conver.ToString在压入堆栈中
MyMethod.Emit(OpCodes.Ret);//返回堆栈中
#endregion
Type NewType = MyType.CreateType();
MyAssemblyBuilder.Save("MM.dll");
object obj = Activator.CreateInstance(NewType);
Console.WriteLine(NewType.GetMethod("AddAB").Invoke(obj, new object[] { 3, 2 }));
}