zoukankan      html  css  js  c++  java
  • .Net 动态编译(c# 脚本)

    1 用.NET提供的类动态编译代码字符串,生成DLL存于内存中,加载到程序域

    2 用反射的方式调用这个DLL

    将要被编译和执行的代码读入并以字符串方式保存
    声明CSharpCodeProvider对象实例
    调用CSharpCodeProvider实例的CompileAssemblyFromSource方法编译
    用反射生成被生成对象的实例(Assembly.CreateInstance)
    调用其方法

    https://blog.csdn.net/clb929/article/details/51385399

    应用:

    1 获取编码字符串

       string strSourceCode = System.IO.File.ReadAllText("./TextFile1.txt");

    2 创建代码生成/编译器访问实例

       CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider();

      CompilerParameters objCompilerParameters = new CompilerParameters();

      //程序集的引用(程序集路径)
      objCompilerParameters.ReferencedAssemblies.Add("System.dll");

      //是否需要将生成的文件(dll)放入内存

      objCompilerParameters.GenerateInMemory = true;
      CompilerResults cr = objCSharpCodePrivoder.CompileAssemblyFromSource(objCompilerParameters, strSourceCode);

    3 通过反射调用刚才加载到内存的库,调用其方法

      Assembly objAssembly = cr.CompiledAssembly;

      //命名空间.类名称
      object objClass = objAssembly.CreateInstance("DyTest.Class1");

      object[] objCodeParms = new object[1];
      objCodeParms[0] = "Allan.";

      //调用方法

      string strResult = (string)objClass.GetType().InvokeMember("Go", BindingFlags.InvokeMethod, null, objClass, objCodeParms);

      

  • 相关阅读:
    使用linux将一个服务器上的文件或者文件夹复制黏贴到另一个服务器上
    深度学习之常用linux命令总结
    python 操作MYSQL数据库
    MYSQL登录及常用命令
    mysql数据库可视化工具—Navicat Premium—安装与激活
    Mysql数据库的简单介绍与入门
    java 正则匹配int型
    js设置文本框只能输入数字
    Java数据抓取(一)
    Nodejs的多线程
  • 原文地址:https://www.cnblogs.com/swobble/p/8659358.html
Copyright © 2011-2022 走看看