1 using System; 2 using System.Reflection; 3 using System.Globalization; 4 using Microsoft.CSharp; 5 using System.CodeDom; 6 using System.CodeDom.Compiler; 7 using System.Text; 8 9 namespace ConsoleApplication1 10 { 11 public class Program 12 { 13 static void Main(string[] args) 14 { 15 // 1.CSharpCodePrivoder 16 CSharpCodeProvider objCSharpCodePrivoder = new CSharpCodeProvider(); 17 18 // 2.ICodeComplier 19 ICodeCompiler objICodeCompiler = objCSharpCodePrivoder.CreateCompiler(); 20 21 // 3.CompilerParameters 22 CompilerParameters objCompilerParameters = new CompilerParameters(); 23 objCompilerParameters.ReferencedAssemblies.Add("System.dll"); 24 objCompilerParameters.GenerateExecutable = false; 25 objCompilerParameters.GenerateInMemory = true; 26 27 // 4.CompilerResults 28 CompilerResults cr = objICodeCompiler.CompileAssemblyFromSource(objCompilerParameters, GenerateCode()); 29 30 if (cr.Errors.HasErrors) 31 { 32 Console.WriteLine("编译错误:"); 33 foreach (CompilerError err in cr.Errors) 34 { 35 Console.WriteLine(err.ErrorText); 36 } 37 } 38 else 39 { 40 // 通过反射,调用HelloWorld的实例 41 Assembly objAssembly = cr.CompiledAssembly; 42 object objHelloWorld = objAssembly.CreateInstance("DynamicCodeGenerate.HelloWorld"); 43 MethodInfo objMI = objHelloWorld.GetType().GetMethod("OutPut"); 44 object res = objMI.Invoke(objHelloWorld, null); 45 bool? bol = false; 46 bol= res as bool?; 47 Console.WriteLine(bol); 48 } 49 50 Console.ReadLine(); 51 } 52 53 static string GenerateCode() 54 { 55 StringBuilder sb = new StringBuilder(); 56 sb.Append("using System;"); 57 sb.Append(Environment.NewLine); 58 sb.Append("namespace DynamicCodeGenerate"); 59 sb.Append(Environment.NewLine); 60 sb.Append("{"); 61 sb.Append(Environment.NewLine); 62 sb.Append(" public class HelloWorld"); 63 sb.Append(Environment.NewLine); 64 sb.Append(" {"); 65 sb.Append(Environment.NewLine); 66 sb.Append(" public bool OutPut()"); 67 sb.Append(Environment.NewLine); 68 sb.Append(" {"); 69 sb.Append(Environment.NewLine); 70 sb.Append(" return 1<2;"); 71 sb.Append(Environment.NewLine); 72 sb.Append(" }"); 73 sb.Append(Environment.NewLine); 74 sb.Append(" }"); 75 sb.Append(Environment.NewLine); 76 sb.Append("}"); 77 78 string code = sb.ToString(); 79 Console.WriteLine(code); 80 Console.WriteLine(); 81 82 return code; 83 } 84 } 85 }
浙公网安备 33010602011771号