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();
执行结果:


浙公网安备 33010602011771号