菜鸟提问!关于C#编译器(基于.NET下的FCL的即时编译器)的问题
我按照参考做了一个例子看看,但是总在那句报错,我找了很多方法还是不行..郁闷ing...
using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using Microsoft.CSharp;
using System.Reflection;
using System.Windows.Forms;
using System.Text;
namespace CompilerApp
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
GetValue("aaaa");
}
static object GetValue( string value )
{
StringBuilder codeSnippet = new StringBuilder();
codeSnippet.Append("using System; \r\n");
codeSnippet.Append("using System.Windows.Forms; \r\n");
codeSnippet.Append("namespace CzG { \r\n");
codeSnippet.Append("public class Eval\r\n");
codeSnippet.Append("{ \r\n");
codeSnippet.Append(" public Eval(){} \r\n");
codeSnippet.Append(" public object GetValue() \r\n");
codeSnippet.Append(" { \r\n");
codeSnippet.Append(" return " + value + ";\r\n");
codeSnippet.Append(" }\r\n");
codeSnippet.Append(" public void ShowMesg()\r\n");
codeSnippet.Append(" {\r\n");
codeSnippet.Append(" System.Windows.Forms.MessageBox.Show(\"Application name cannot be empty\");\r\n");
codeSnippet.Append(" }\r\n");
codeSnippet.Append("}\r\n");
codeSnippet.Append("} \r\n");
codeSnippet.Append(" \r\n");
codeSnippet.Append(" \r\n");
CodeSnippetCompileUnit unit = new CodeSnippetCompileUnit( codeSnippet.ToString() );
ICodeCompiler compiler = new CSharpCodeProvider().CreateCompiler();
CompilerParameters para = new CompilerParameters();
para.ReferencedAssemblies.Add( "System.dll" );
para.ReferencedAssemblies.Add( "System.Windows.Forms.dll" );
para.GenerateInMemory = true;
para.GenerateExecutable = false;
para.OutputAssembly = "CompilerApp.exe";
Assembly asm = compiler.CompileAssemblyFromDom( para , unit ).CompiledAssembly;
Type type = asm.GetType( "CzG.Eval" );
MethodInfo mi = type.GetMethod( "Eval.ShowMesg" , BindingFlags.Public | BindingFlags.Instance ); //*****错在这里!!!!*****
object obj = asm.CreateInstance( "CzG.Eval" );
return mi.Invoke( obj , null );
}
}
}大家直接拷贝粘贴就可以运行的,麻烦看看吧...谢谢