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

      

  • 相关阅读:
    Brupsuite 中插件CO2的使用
    记事本默认编码改为UTF-8
    Crackme031
    Crackme030
    Crackme029
    Crackme028
    Crackme026
    Crackme025
    Crackme024
    Crackme022
  • 原文地址:https://www.cnblogs.com/swobble/p/8659358.html
Copyright © 2020-2023  润新知