using System; using System.CodeDom; using System.CodeDom.Compiler; using Microsoft.CSharp; using System.Reflection; using System.Text;namespace TestApp { public class Test { public static void Main() { string expression = "125.8 + 208.2 + 120.90"; string ret = Eval.Calc(expression).ToString(); Console.Write("{0} = {1} ",expression, ret); } } public class Eval { public static object Calc(string expression) { string className = "Calc"; string methodName = "Run";
// 创建编译器实例。 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());
using System.CodeDom;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.Reflection;
using System.Text;namespace TestApp
{
public class Test
{
public static void Main()
{
string expression = "125.8 + 208.2 + 120.90";
string ret = Eval.Calc(expression).ToString();
Console.Write("{0} = {1} ",expression, ret);
}
} public class Eval
{
public static object Calc(string expression)
{
string className = "Calc";
string methodName = "Run";
// 创建编译器实例。
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);
return method.Invoke(eval, null);
}
}
}
我也不明白是咋回事
可不可以把你们的例题发到[email protected]里面。谢谢了。