首页 > 代码库 > 反射发出

反射发出

反射用来获取程序集及其相关信息。

反射发出是在运行时动态构造元数据和MSIL语言还可生产PE文件。

使用反射发出的步骤基本是固定的 ,用HELLO  WORD 做开始

        public void BuildeMthod()        {            //1.构建程序集            AppDomain myDomain = AppDomain.CurrentDomain;            AssemblyName asmName = new AssemblyName();            asmName.Name = "MyDom";            AssemblyBuilder myAsmBuilder = myDomain.DefineDynamicAssembly(                                           asmName,                                           AssemblyBuilderAccess.RunAndSave);            //模块和类型            ModuleBuilder myModule = myAsmBuilder.DefineDynamicModule("MyDom",                                                                "MyDom.dll");            //类型            TypeBuilder myTypeBld = myModule.DefineType("MyDomType",                                                        TypeAttributes.Public);            //方法             MethodBuilder myMthdBld = myTypeBld.DefineMethod(                                           "SampleC",                                           MethodAttributes.Public |                                           MethodAttributes.Static                                           );            //生成MSIL语言            ILGenerator ILout = myMthdBld.GetILGenerator();            ILout.Emit(OpCodes.Nop);            ILout.Emit(OpCodes.Ldstr, "Hello World!");            MethodInfo mi = typeof(System.Console).GetMethod("Write", new Type[] { typeof(string) });            ILout.Emit(OpCodes.Call,mi);            ILout.Emit(OpCodes.Nop);            ILout.Emit(OpCodes.Ret);            Type myType = myTypeBld.CreateType();            myAsmBuilder.Save("MyDom.dll");            MethodInfo myMthdInfo = myType.GetMethod("SampleC");            myMthdInfo.Invoke(myType,null);        }

 

反射发出