C#将字符串编译成程序集并执行

实现将字符串编译为代码并在程序中使用,实际应用可将字符串保存在文件中,程序启动后读取文件中字符转换为代码执行,这样只需要修改文件不改动代码就可以增删或修改程序功能,提高程序的灵活性。

例如,要实现下面的代码:

using System;
namespace TestSpace
{
    class Test
    {
        public void outPut(string value)
        {
            Console.WriteLine("RCV:" + value);
            Console.WriteLine(DateTime.Now.ToString());
        }
    }
}

首先添加引用:

using System;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
using System.Reflection;

将上面的代码写成字符串:

string codeStr = "using System;";
codeStr += "namespace TestSpace{";
codeStr += "class Test{";
codeStr += "public void outPut(string value){";
codeStr += "Console.WriteLine(\"RCV:\"+value);";
codeStr += "Console.WriteLine(DateTime.Now.ToString());";
codeStr += "}}}";

下面是代码实现:

CSharpCodeProvider cs = new CSharpCodeProvider();
CompilerParameters cp = new CompilerParameters();
cp.GenerateInMemory = true;
cp.GenerateExecutable = false;
cp.ReferencedAssemblies.Add("System.dll");
CompilerResults cr = cs.CompileAssemblyFromSource(cp, codeStr);//返回字符串的编译结果
Assembly ass = cr.CompiledAssembly;//获取编译的程序集
object obj = ass.CreateInstance("TestSpace.Test");//创建程序集中TestSpace命名空间下Test类的实例
MethodInfo mi = obj.GetType().GetMethod("outPut");//使用反射获得该实例的outPut方法
mi.Invoke(obj, new object[] { "12345" });//执行实例的outPut方法,并传入参数
Console.ReadLine();

执行结果:

 

posted @ 2023-06-15 20:47  [春风十里]  阅读(70)  评论(0编辑  收藏  举报