<高手请进> 急! 关于C#动态执行代码...
using System.Text;
using Microsoft.CSharp;
using System.CodeDom.Compiler;
using System.Reflection;
namespace TestControls
{
public class ExecuteCSharp
{
public static void Eval()
{
//CSharpCodeProvider provider = new CSharpCodeProvider();
//ICodeCompiler compiler = provider.CreateCompiler();
CodeDomProvider compiler = new CSharpCodeProvider();
CompilerParameters cp = new CompilerParameters();
StringBuilder codeBuilder = new StringBuilder();
codeBuilder.AppendLine("using System;");
codeBuilder.AppendLine("using System.Text;");
codeBuilder.AppendLine("using System.Windows.Forms;");
codeBuilder.AppendLine("using System.Collections.Generic;");
codeBuilder.AppendLine();
codeBuilder.AppendLine("namespace TestControls");
codeBuilder.AppendLine("{");
codeBuilder.AppendLine(" public class Test");
codeBuilder.AppendLine(" {");
codeBuilder.AppendLine(" public void Exec()");
codeBuilder.AppendLine(" {");
codeBuilder.AppendLine(" MessageBox.Show(\"测试ing...\");");
codeBuilder.AppendLine(" }");
codeBuilder.AppendLine(" }");
codeBuilder.AppendLine("}");
cp.GenerateExecutable = false;
cp.GenerateInMemory = true;
CompilerResults cr = compiler.CompileAssemblyFromSource(cp, codeBuilder.ToString());
if (!cr.Errors.HasErrors) //注意、注意:此处通过不了
{
Assembly a = cr.CompiledAssembly;
Type t = a.GetType("Test");
MethodInfo mi = t.GetMethod("Exec", BindingFlags.Static | BindingFlags.Public);
mi.Invoke(null, new object[0]);
}
}
}
}
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace TestControls
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()
{
ExecuteCSharp.Eval();
}
}
}
为什么我调用不了[动态代码]里的Test(类) -> Exec方法呢?
动态编译根本通过不了,是不是我用的方法错了,请高手指示...