zoukankan      html  css  js  c++  java
  • C# 动态生成DLL

    using System;
    using System.Data;
    using System.Configuration;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.CodeDom;
    using Microsoft.CSharp;
    using System.IO;
    using System.CodeDom.Compiler;
    using System.Text;
    using System.Reflection;

    /// <summary>
    /// Summary description for Create_Dll
    /// </summary>
    public class Create_Dll
    {
     public Create_Dll()
     {
      //
      // TODO: Add constructor logic here
      //
     }
        /// <summary>
        /// 创建数据库MODEL类
        /// </summary>
        /// <param name="classNamespace">实体类名称</param>
        /// <returns></returns>
        public void Create_Model_DLL(string classNamespace)
        {   String Dll_file_Name = "";
            Dll_file_Name = classNamespace+"MODEL.dll";
            //生成一个可编译的单元,这是最根部的东西
            CodeCompileUnit compunit = new CodeCompileUnit();

            //  创建编译器实例//设置编译器对象
            CSharpCodeProvider csprovider = new CSharpCodeProvider();
            ICodeCompiler complier = csprovider.CreateCompiler();
            ICodeGenerator gen = csprovider.CreateGenerator();   //生成CS文件
            //  设置编译参数。 
            CompilerParameters paras = new CompilerParameters();
            paras.GenerateExecutable = false;   //编译成exe还是dll
            paras.GenerateInMemory = false;           //是否写入内存,不写入内存就写入磁盘
            paras.OutputAssembly = "d:\\" + Dll_file_Name;         //输出路径
            paras.IncludeDebugInformation = false; //是否产生pdb调试文件      默认是false

       
            paras.ReferencedAssemblies.Add("System.dll");//添加引用DLL
            paras.ReferencedAssemblies.Add("System.Data.dll");//添加引用DLL
         

            StringBuilder Greef_Song_Class_Source = new StringBuilder();
        
            Greef_Song_Class_Source.Append("using System;\r\n");
            Greef_Song_Class_Source.Append("using System.Collections.Generic;\r\n");
            Greef_Song_Class_Source.Append("using System.Text;\r\n");
            Greef_Song_Class_Source.Append("using System.Data;\r\n");
            Greef_Song_Class_Source.Append("using System.Data.SqlClient;\r\n");
         
             //#region 命名空间及类名
            Greef_Song_Class_Source.Append("namespace " + classNamespace +".MODEL \r\n");
            Greef_Song_Class_Source.Append("{ \r\n");
         
            MYSQL_SQLDB SQLDB = new MYSQL_SQLDB();
            DataTable dt = new DataTable();
            DataTable dt1 = new DataTable();
            dt1.Clear();
            dt1 = SQLDB.Get_DataTable_By_ExecuteSQL("show tables");
              //类定义开始
             
            foreach (DataRow DB_Table_Names_dr in dt1.Rows)
            {
                //定义类开始
                Greef_Song_Class_Source.Append("    [Serializable()]   \r\n ");
                Greef_Song_Class_Source.Append("    public class " + classNamespace + "_MODEL_" + DB_Table_Names_dr[0].ToString() + "\r\n");
                Greef_Song_Class_Source.Append("    {  \r\n");
              
                dt.Clear();
                dt = SQLDB.Get_DataTable_By_ExecuteSQL("desc " + DB_Table_Names_dr[0].ToString().ToString() + "");
                foreach (DataRow dr in dt.Rows)
                {
                    //定义字段
                    Greef_Song_Class_Source.Append("        /// <summary> \r\n");
                    Greef_Song_Class_Source.Append("        /// 此字段为数据表(" + DB_Table_Names_dr[0].ToString() + ")中的字段:" + dr[0].ToString() + "\r\n");
                    Greef_Song_Class_Source.Append("        /// </summary> \r\n");
                    Greef_Song_Class_Source.Append("        public String  "+dr[0].ToString() + ";                                                       \r\n");
                    //定义字段结束
                   // 定义属性
                    Greef_Song_Class_Source.Append("       [System.ComponentModel.DisplayName(\"此属性为:数据表(" + DB_Table_Names_dr[0].ToString() + ")中的字段:" + dr[0].ToString() + "\")]     \r\n");
                    Greef_Song_Class_Source.Append("        public String " + DB_Table_Names_dr[0].ToString() + "_" + dr[0].ToString() + "                 \r\n");
                    Greef_Song_Class_Source.Append("      {" +"                                                                                                      \r\n");
                    //获取属性值
                    Greef_Song_Class_Source.Append("           get                                                                                                   \r\n");
                    Greef_Song_Class_Source.Append("              {                                                                                                  \r\n");
                    Greef_Song_Class_Source.Append("               return  "  + dr[0].ToString() + " ;                                                    \r\n");
                    Greef_Song_Class_Source.Append("               }                                                                                                 \r\n");
                    //获取属性值结束
                    //设定属性值
                    Greef_Song_Class_Source.Append("           set                                                                                                   \r\n");
                    Greef_Song_Class_Source.Append("              {                                                                                                  \r\n");
                    Greef_Song_Class_Source.Append("                " + dr[0].ToString() + " =value;                                                    \r\n");
                    Greef_Song_Class_Source.Append("               }                                                                                                 \r\n");
                    //设定属性值结束
                    Greef_Song_Class_Source.Append("      }                                                                                                          \r\n");
                    //定义属性结束
            
                }
                Greef_Song_Class_Source.Append("   }         \r\n");
                //类定义结束

            }
          
            Greef_Song_Class_Source.Append("}            \r\n");
            CompilerResults result = complier.CompileAssemblyFromSource(paras, Greef_Song_Class_Source.ToString());
          
         
        }
        public string Create_DAL_DLL(string classNamespace)
        {
            //string classNamespace/命名空间
            //string className 类名或表名
            String Dll_file_Name = "";
            Dll_file_Name = classNamespace + "DAL.dll";
            //生成一个可编译的单元,这是最根部的东西
            CodeCompileUnit compunit = new CodeCompileUnit();

            //  创建编译器实例//设置编译器对象
            CSharpCodeProvider csprovider = new CSharpCodeProvider();
            ICodeCompiler complier = csprovider.CreateCompiler();
            ICodeGenerator gen = csprovider.CreateGenerator();   //生成CS文件
            StreamWriter sw = new StreamWriter(@"c:\testywm.cs", false);
            gen.GenerateCodeFromCompileUnit(compunit, sw, new CodeGeneratorOptions());


            //  设置编译参数。 
            CompilerParameters paras = new CompilerParameters();
            paras.GenerateExecutable = false;   //编译成exe还是dll
            paras.GenerateInMemory = false;           //是否写入内存,不写入内存就写入磁盘
            paras.OutputAssembly = "d:\\" + Dll_file_Name;         //输出路径
            paras.IncludeDebugInformation = false; //是否产生pdb调试文件      默认是false


            paras.ReferencedAssemblies.Add("System.dll");//添加引用DLL
            paras.ReferencedAssemblies.Add("System.Data.dll");//添加引用DLL
            paras.ReferencedAssemblies.Add("D:\\" + classNamespace + "MODEL.dll");//添加引用DLL
              

            StringBuilder Greef_Song_Class_Source = new StringBuilder();

            Greef_Song_Class_Source.Append("using System;\r\n");
            Greef_Song_Class_Source.Append("using System.Collections.Generic;\r\n");
            Greef_Song_Class_Source.Append("using System.Text;\r\n");
            Greef_Song_Class_Source.Append("using System.Data;\r\n");
            Greef_Song_Class_Source.Append("using System.Data.SqlClient;\r\n");
            Greef_Song_Class_Source.Append("using " + classNamespace + ".MODEL;\r\n");
            
            //#region 命名空间及类名
            Greef_Song_Class_Source.Append("namespace " + classNamespace + ".DAL \r\n");
            Greef_Song_Class_Source.Append("{ \r\n");

            MYSQL_SQLDB SQLDB = new MYSQL_SQLDB();
            DataTable dt = new DataTable();
            DataTable dt1 = new DataTable();
            dt1.Clear();
            dt1 = SQLDB.Get_DataTable_By_ExecuteSQL("show tables");
            //类定义开始

            foreach (DataRow DB_Table_Names_dr in dt1.Rows)
            {
                //定义类开始
                Greef_Song_Class_Source.Append("    [Serializable()]   \r\n ");
                Greef_Song_Class_Source.Append("    public class " + classNamespace + "_DAL_" + DB_Table_Names_dr[0].ToString() + "\r\n");
                Greef_Song_Class_Source.Append("    {  \r\n");

               
                    //定义字段
                Greef_Song_Class_Source.Append("       public " + classNamespace + "_MODEL_" + DB_Table_Names_dr[0].ToString() + " Member = new " + classNamespace + "_MODEL_" + DB_Table_Names_dr[0].ToString() + "();                                                       \r\n");
                    //定义字段结束
                          
                Greef_Song_Class_Source.Append("   }         \r\n");
                //类定义结束

            }

            Greef_Song_Class_Source.Append("}            \r\n");

            sw.Write(Greef_Song_Class_Source.ToString());   //输出文件
            sw.Close();    //关闭文件


            //  System.Diagnostics.Debug.WriteLine(Greef_Song_Class_Source.ToString()); // 调试用。注释掉
            //  编译代码。 
            CompilerResults result = complier.CompileAssemblyFromSource(paras, Greef_Song_Class_Source.ToString());
            //  获取编译后的程序集。

            //Assembly assembly = result.CompiledAssembly;

            return Greef_Song_Class_Source.ToString();
            ////  动态调用方法。
            //object eval = assembly.CreateInstance(className);
            //MethodInfo method = eval.GetType().GetMethod(methodName);
            // object reobj = "生成dll成功";// method.Invoke(eval, null);
            //GC.Collect();
            // return reobj;

        }


    }

  • 相关阅读:
    iOS drewRect方法
    iOS中的单例
    iOS中类别的使用
    iOS存储的三种方式
    安卓上微信闪退的一种解决方法
    [Z] 通天塔导游:各种编程语言的优缺点
    怎样面对痛苦?
    [Z] 10 种必知必会的软件开发工具
    [Z] Linux 内核同步机制
    [Z] 囚禁你的精灵(daemon)进程
  • 原文地址:https://www.cnblogs.com/greefsong/p/2599186.html
Copyright © 2011-2022 走看看