您的位置:首页 > 其它

一个动态编译的简单例子

2010-07-22 16:57 344 查看
using System;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
using System.Reflection;

public class Example
{
static void Main()
{
CSharpCodeProvider provider = new CSharpCodeProvider();
System.CodeDom.Compiler.ICodeCompiler compiler = provider.CreateCompiler();
CompilerParameters parameter = new CompilerParameters();
parameter.ReferencedAssemblies.Add("System.dll");
parameter.GenerateExecutable = false;
parameter.GenerateInMemory = true;

string strCode = GenerateCode("0", "1", ">");
CompilerResults result = compiler.CompileAssemblyFromSource(parameter, strCode);
if (result.Errors.HasErrors)
{
foreach (CompilerError err in result.Errors)
{
Console.WriteLine(err.ErrorText);
}

//foreach (string str in result.Output)
//{
// Console.WriteLine(str);
//}
}
else
{
Assembly assembly = result.CompiledAssembly;
Type AType = assembly.GetType("MyNameSpace.MyClass");
MethodInfo method = AType.GetMethod("MyFunc");
Console.WriteLine(method.Invoke(null, null));
}
Console.Read();
}

static string GenerateCode(string lpara, string rparam, string op)
{
return "using System; namespace MyNameSpace{ public class MyClass{ public static object MyFunc(){ return "+ lpara + op + rparam +" }}}";
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: