//第一步:添加引用 using System.Reflection; using Microsoft.CSharp; using System.CodeDom.Compiler; //第二步:创建需要编译的代码 string MyCodeString=@" public class MyTest { public static string GetTestString() { string MyStr = ""This is a Dynamic Compiler Demo!""; return MyStr; } }"; //第三步:实现动态编译 CompilerParameters compilerParams = new CompilerParameters(); ///编译器选项设置 compilerParams.CompilerOptions = "/target:library /optimize"; ///编译时在内存输出 compilerParams.GenerateInMemory = true; ///生成调试信息 compilerParams.IncludeDebugInformation = false; ///添加相关的引用 compilerParams.ReferencedAssemblies.Add("mscorlib.dll"); compilerParams.ReferencedAssemblies.Add("System.dll"); ICodeCompiler compiler = new CSharpCodeProvider().CreateCompiler(); ///编译 CompilerResults results = compiler.CompileAssemblyFromSource(compilerParams,MyCodeString); //第四步:输出编译结果 ///创建程序集 Assembly asm = results.CompiledAssembly; ///获取编译后的类型 object objMyTestClass = asm.CreateInstance("MyTest"); Type MyTestClassType=objMyTestClass.GetType(); ///输出结果 Console.WriteLine(MyTestClassType.GetMethod("GetTestString").Invoke(objMyTestClass,null)); Console.ReadLine(); //至此,一个简单的动态编译程序就完了,我们看到输出的结果为: This is a Dynamic Compiler Demo!
//完整的程序清单: using System; using System.Reflection; using Microsoft.CSharp; using System.CodeDom.Compiler; public class MyDynamicCompiler { public static void Main() { ///需要编译的字符串 string MyCodeString=@" public class MyTest { public static string GetTestString() { string MyStr = ""This is a Dynamic Compiler Demo!""; return MyStr; } }"; CompilerParameters compilerParams = new CompilerParameters(); ///编译器选项设置 compilerParams.CompilerOptions = "/target:library /optimize"; ///编译时在内存输出 compilerParams.GenerateInMemory = true; ///生成调试信息 compilerParams.IncludeDebugInformation = false; ///添加相关的引用 compilerParams.ReferencedAssemblies.Add("mscorlib.dll"); compilerParams.ReferencedAssemblies.Add("System.dll"); ICodeCompiler compiler = new CSharpCodeProvider().CreateCompiler(); ///编译 CompilerResults results = compiler.CompileAssemblyFromSource(compilerParams,MyCodeString); ///创建程序集 Assembly asm = results.CompiledAssembly; ///获取编译后的类型 object objMyTestClass = asm.CreateInstance("MyTest"); Type MyTestClassType=objMyTestClass.GetType(); ///输出结果 Console.WriteLine(MyTestClassType.GetMethod("GetTestString").Invoke(objMyTestClass,null)); Console.ReadLine(); } }
原文:http://www.cnblogs.com/bcodesoft/p/3604289.html