c#动态运行C#脚本

来源:互联网 发布:日本东北大学 知乎 编辑:程序博客网 时间:2024/05/07 12:48

using Microsoft.CSharp;

using System.CodeDom.Compiler;

using System.Reflection;

 

private void button1_Click(object sender, EventArgs e)

{

    ICodeCompiler vCodeCompiler = new CSharpCodeProvider().CreateCompiler();

    CompilerParameters vCompilerParameters = new CompilerParameters();

    vCompilerParameters.GenerateExecutable = false;

    vCompilerParameters.GenerateInMemory = true;

    string vSource =

        "public class Temp"n" +

        "{"n" +

        "   public double Test(double A, double B)"n" +

        "   {"n" +

        "       return A / B;"n" +

        "   }"n" +

        "}"n";

    CompilerResults vCompilerResults =

        vCodeCompiler.CompileAssemblyFromSource(vCompilerParameters, vSource);

    Assembly vAssembly = vCompilerResults.CompiledAssembly;

    object vTemp = vAssembly.CreateInstance("Temp");

    MethodInfo vTest = vTemp.GetType().GetMethod("Test");

    for (int i = 1; i < 100; i++)

    {

        object[] vParams = { 1, i };

        object vDouble = vTest.Invoke(vTemp, vParams);

        textBox1.AppendText(vDouble.ToString() + ""r"n");

    }

}