反射.CS文件(动态加载.CS文件)(

//假设我们己经把b.cs文件上传到TempDll文件夹下,下面我们取得该文件和将要生成的DLL文件路径
        string strCS = Server.MapPath("TempDll/b.cs");
        string strDll = strCS.Substring(0, strCS.LastIndexOf(".")) + ".dll";
 

         CodeDomProvider   COD =  new  Microsoft.CSharp.CSharpCodeProvider();
         COD = new Microsoft.CSharp.CSharpCodeProvider();
        CompilerParameters COM = new CompilerParameters();
         //生成DLL,True为生成exe文件,false为生成DLL文件
        COM.GenerateExecutable = false;
        COM.OutputAssembly = strDll;
        //把CS文件生成DLL
        CompilerResults COMR = COD.CompileAssemblyFromFile(COM, strCS);

      //下面我们就可以根据生成的Dll反射为相关对象,供我们使用了.
        Assembly a = Assembly.LoadFrom(strDll);
        Type  t = a.GetType("b");
        object obj = Activator.CreateInstance(t);
        t.GetMethod("run").Invoke(obj,null);

 

     


       //备注:
         // (1)反射的.CS文件中只能引用SYSTEM命名空间
         //   (2)我们也可以直接把CS文件转化为流反射进程序,但这样会大大减慢程序运行.
         //   (3)所以先上传.CS文件并生成.DLL文件,供程序反射使用会相应降低运行成本

posted @ 2011-10-11 13:59  awp110  阅读(836)  评论(0编辑  收藏  举报