码迷,mamicode.com
首页 > 其他好文 > 详细

生成DLL

时间:2015-07-16 16:22:23      阅读:112      评论:0      收藏:0      [点我收藏+]

标签:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Reflection.Emit;

namespace EmitDemo
{
    public class DLLCreator
    {
        public static void Main(string[] arsg)
        {
            var asmName = new AssemblyName("Test");
            var asmBuider = AppDomain.CurrentDomain.DefineDynamicAssembly(asmName, AssemblyBuilderAccess.RunAndSave);
            var mdlbldr = asmBuider.DefineDynamicModule("Hello", "Hello.exe");
            var typebldr = mdlbldr.DefineType("Hello", TypeAttributes.Public);
            var methodbldr = typebldr.DefineMethod("SayHello", MethodAttributes.Public | MethodAttributes.Static, null, null);
            var il = methodbldr.GetILGenerator();
            il.Emit(OpCodes.Ldstr, "Hello ,world");
            il.Emit(OpCodes.Call, typeof(Console).GetMethod("WriteLine", new Type[] { typeof(string) }));
            il.Emit(OpCodes.Call, typeof(Console).GetMethod("ReadLine"));
            il.Emit(OpCodes.Pop);//读入的值会被推送至evaluation stack,而本方法是没有返回值的,因此,需要将栈上的值抛弃    
            il.Emit(OpCodes.Ret);
            var t = typebldr.CreateType();
            asmBuider.SetEntryPoint(t.GetMethod("SayHello"));
            asmBuider.Save("Hello.exe");
        }
    }
}

 

生成DLL

标签:

原文地址:http://www.cnblogs.com/ziranquliu/p/4651173.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!