日期:2014-05-18 浏览次数:20503 次
public class Program { static void Main(string[] args) { // 1.CSharpCodePrivoder CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider(); // 2.ICodeComplier ICodeCompiler objICodeCompiler = objCSharpCodePrivoder.CreateCompiler(); //CodeDomProvider objICodeCompiler = (ICodeCompiler)objCSharpCodePrivoder.CreateCompiler(); // 3.CompilerParameters CompilerParameters objCompilerParameters = new CompilerParameters(); objCompilerParameters.ReferencedAssemblies.Add("System.dll"); //objCompilerParameters.ReferencedAssemblies.Add("System.dll"); objCompilerParameters.GenerateExecutable = true; objCompilerParameters.GenerateInMemory = false; objCompilerParameters.CompilerOptions = "/out:d:/b.exe /target:exe"; // 4.CompilerResults CompilerResults cr = objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters, GenerateCode()); //cr.PathToAssembly = "d:/a.exe"; if (cr.Errors.HasErrors) { Console.WriteLine("编译错误:"); foreach (CompilerError err in cr.Errors) { Console.WriteLine(err.ErrorText); } } //Console.WriteLine(cr.PathToAssembly); //else //{ // // 通过反射,调用HelloWorld的实例 // Assembly objAssembly = cr.CompiledAssembly; // object objHelloWorld = objAssembly.CreateInstance("DynamicCodeGenerate.HelloWorld"); // MethodInfo objMI = objHelloWorld.GetType().GetMethod("Main"); // Console.WriteLine(objMI.Invoke(objHelloWorld, null)); //} Console.ReadLine(); } static string GenerateCode() { StringBuilder sb = new StringBuilder(); sb.Append("using System;using System.Text.RegularExpressions;"); sb.Append(Environment.NewLine); sb.Append("namespace DynamicCodeGenerate"); sb.Append(Environment.NewLine); sb.Append("{"); sb.Append(Environment.NewLine); sb.Append(" public class HelloWorld"); sb.Append(Environment.NewLine); sb.Append(" {"); sb.Append(Environment.NewLine); sb.Append(" static void Main(string[] args)"); sb.Append(Environment.NewLine); sb.Append(" {"); sb.Append(Environment.NewLine); sb.Append("Regex rgx = new Regex(); Console.Write(\"Hello world!\");"); sb.Append(Environment.NewLine); sb.Append(" }"); sb.Append(Environment.NewLine); sb.Append(" }"); sb.Append(Environment.NewLine); sb.Append("}"); string code = sb.ToString(); Console.WriteLine(code); Console.WriteLine(); return code; } }