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);

      

  • 相关阅读:
    “百度杯”CTF比赛 九月场 code
    初识thinkphp(3)
    i春秋CTF web题(1)
    初识thinkphp(2)
    初识thinkphp(1)
    0MQ底层队列设计
    0MQ文档导读
    LF模式是个坑,ZeroIce中间件让你体会这个痛
    0xe7f001f0!?NDK调试过程,无故抛出SIGSEGV。
    KDevelop
  • 原文地址:https://www.cnblogs.com/swobble/p/8659358.html
Copyright © 2011-2022 走看看