1 public static void Main(string[] args)
2 {
3 string test = @"
4 int MAX_N = 100;
5 int n = 10;
6 int i = 10;
7 int k = 10;
8 int l = 10;
9 return ((n == MAX_N) && (i < MAX_N))|((k == MAX_N) && (l < MAX_N));
10 ";
11
12 string code = CodeBegin + test + CodeEnd;
13 Console.WriteLine(code);
14 CSharpCodeProvider provider = new CSharpCodeProvider();
15 ICodeCompiler compiler = provider.CreateCompiler();
16 CompilerParameters param = new CompilerParameters();
17 param.ReferencedAssemblies.Add("System.dll");
18 param.GenerateExecutable = false;
19 param.GenerateInMemory = true;
20 CompilerResults cr = compiler.CompileAssemblyFromSource(param, code);
21 if (cr.Errors.HasErrors)
22 {
23 Console.WriteLine("编译错误:");
24 foreach (CompilerError err in cr.Errors)
25 Console.WriteLine(err.ErrorText);
26 }
27 else
28 {
29 Assembly assembly = cr.CompiledAssembly;
30 MethodInfo mi = assembly.GetType("RuntimeCompute.JudgeCondition").GetMethod("GetValue");
31 object value = mi.Invoke(null, null);
32 Console.WriteLine(value);
33 }
34
35 Console.ReadKey(true);
36 }
37 static string CodeBegin = @"
38 using System;
39
40 namespace RuntimeCompute
41 {
42 class JudgeCondition
43 {
44 public static bool GetValue()
45 {
46 ";
47
48 static string CodeEnd = @"
49 }
50 }
51 }
52 ";