轉載: 使用CSharpCodeProvider类编译C#代码 |
想写一个小的C#编辑器,可以用来测试一些代码,也不用在VS2005新建一个工程了.
实现一个C#编辑器最根本的就是要实现编译了..要实现这个我第一个就是参考SharpDevelop(一个开源的.Net IDE),打开它的源代码,发现它把csc.exe的调用和相关的参数封装起来使用...
其实Microsoft.CSharp命名空间已经有了这样的一个类"CSharpCodeProvider".我可以直接使用它来编译C#了.
示例:
Microsoft.CSharp.CSharpCodeProvider csc
=
new
CSharpCodeProvider();
System.CodeDom.Compiler.CompilerParameters param = new System.CodeDom.Compiler.CompilerParameters(); param.OutputAssembly = @" E:/CuteSharpEditor/Test/bin/Debug/TestProvider.exe " ; // 添加引用,编译器默认引用mscorlib.dll,所以下面那句不写也行 param.ReferencedAssemblies.Add (System.Runtime.InteropServices.RuntimeEnvironment.GetRuntimeDirectory() + " mscorlib.dll " ); // 制定程序入口类名,如果只有一个Main,不用写也一样 param.MainClass = " Test.Program " ; // 告诉编译器要编译的不是一个类库 param.GenerateExecutable = true ; // 编译文本框中的C#代码,此外还有CompileAssemblyFromFile和CompileAssemblyFromDom方法 CompilerResults results = csc.CompileAssemblyFromSource(param, new string [] { textBox1.Text }); // 输出编译错误 StringBuilder sb = new StringBuilder( " Output:/n " ); foreach ( string output in results.Output) { sb.Append(output + " /n " ); } sb.Append( " /nErrors:/n " ); foreach (CompilerError error in results.Errors) { sb.Append(error.ErrorText + " /n " ); } textBox1.Text = sb.ToString(); // 执行刚才编译的程序 if (results.Errors.Count == 0 ) { AppDomain domain = AppDomain.CreateDomain( " Compiled App " ); domain.ExecuteAssembly(results.PathToAssembly); } |
使用CSharpCodeProvider类编译C#代码
最新推荐文章于 2024-04-18 15:44:29 发布