zoukankan      html  css  js  c++  java
  • C# 动态编译

    动态编译

    动态编译流程:源码代码模板 ==》 编译DLL ==》 反射调用
    
    • 引用
    using Microsoft.CSharp;
    using System;
    using System.CodeDom.Compiler;
    

    一、设置源码代码模板

    string code = @"
                    using System;
                    class HelloWord
                    {
                        public void  Hello(string name)
                        {
                            Console.WriteLine(""Hello "" + name);
                        }
                    }";
    

    二、编译DLL

    // Compiler and CompilerParameters
    CSharpCodeProvider codeProvider = new CSharpCodeProvider();
    CompilerParameters compParameters = new CompilerParameters();
    
    //compParameters.ReferencedAssemblies.Add("System.dll"); //引入第三方dll
    //compParameters.ReferencedAssemblies.Add(@"D:自定义方法自定义方法inLogHelper.dll");//引入自定义dll
    //compParameters.GenerateInMemory = false;//是否内存中生成输出
    //compParameters.GenerateExecutable = false;//是否生成可执行文件
    //compParameters.OutputAssembly = "<Dll's path>";//设置Dll路径地址
    
    // Compile the code
    CompilerResults result = codeProvider.CompileAssemblyFromSource(compParameters, code);
    

    三、反射调用

    //1.Load dll
    Assembly assembly = Assembly.LoadFile(Environment.CurrentDirectory + "/Demo.dll");
    object myClass1 = assembly.CreateInstance("HelloWord");
    myClass1.GetType().GetMethod("Hello").Invoke(myClass1, new object[] { "Jack" });
    
    //2.Load CompilerResults
    object myClass = result.CompiledAssembly.CreateInstance("HelloWord");
    myClass1.GetType().GetMethod("Hello").Invoke(myClass1, new object[] { "Jack" });
    
  • 相关阅读:
    存储过程分页
    连接数据库
    绑定数据
    有关最近做的项目中用到的日期控件
    循环累加 由for _foreach
    打印gridview 中的所有内容
    list<>操作
    创建表两个主键外键~~~
    连接数据库sql server 2005
    WPF控件编程
  • 原文地址:https://www.cnblogs.com/tangpeng97/p/13891080.html
Copyright © 2011-2022 走看看