编程开发 > ASP > 文章内容

一个动态编译的例子

2012-4-24编辑:zwj

using System;using System.CodeDom.Compiler;using Microsoft.CSharp;using System.Reflection;using System.Text;
namespace ConsoleApplication22{/// summary/// Class1 的摘要说明。/// /summaryclass Class1{/// summary/// 应用程序的主入口点。/// /summary[STAThread]static void Main(string[] args){//// TODO: 在此处添加代码以启动应用程序//int i = (int)Calc(1+2*3);Console.WriteLine(i.ToString());Console.ReadLine();
}
public static object Calc(string expression) { string className = Calc; string methodName = Run; expression=expression.Replace(/,*1.0/); // 创建编译器实例。 ICodeCompiler complier = (new CSharpCodeProvider().CreateCompiler()); // 设置编译参数。 CompilerParameters paras = new CompilerParameters(); paras.GenerateExecutable = false; paras.GenerateInMemory = true; // 创建动态代码。 StringBuilder classSource = new StringBuilder(); classSource.Append(public class + className +\n); classSource.Append({\n); classSource.Append( public object  + methodName + ()\n); classSource.Append( {\n); classSource.Append( return + expression + ;\n); classSource.Append( }\n); classSource.Append(}); //System.Diagnostics.Debug.WriteLine(classSource.ToString()); // 编译代码。 CompilerResults result = complier.CompileAssemblyFromSource(paras, classSource.ToString());  // 获取编译后的程序集。 Assembly assembly = result.CompiledAssembly;  // 动态调用方法。 object eval = assembly.CreateInstance(className); MethodInfo method = eval.GetType().GetMethod(methodName); object reobj = method.Invoke(eval, null); GC.Collect();return reobj;
}
}}

javascript写打开窗口的技巧

热点推荐

登录注册
触屏版电脑版网站地图