使用CSharpCodeProvider类编译C#代码

轉載:

使用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);
            }
 
 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值