在c#编写的软件中动态地编译新的代码

本文介绍如何在C#程序中使用CodeDomProvider、CompilerParameters和CompilerResults类动态编译代码,并展示了编译过程及错误处理。示例代码演示了编译一个Windows自动ADSL拨号程序的过程。
摘要由CSDN通过智能技术生成

 

首先解释一下:

这里用到了几个类,CodeDomProvider 、CompilerParameters 、CompilerResults 。

CodeDomProvider类提供了我们编译代码的容器,我们通过它来工作;

 大家都知道,现在我们要做的是一个很复杂的过程,因为这个程序要编译其他人写的代码,所以肯定需要配置很多的参数,这时我们就要用到CompilerParameters类;

最后我们生成了最后的exe文件,但那是我们完全正确的时候,如果错误了怎么办呢?这时我们肯定需要程序给出一个结果,告诉我们我们这个复杂的过程最后造成了什么样的“后果”,无论对或错,总会有个结果啊,这时就用到了 CompilerResults 类。

这里的textBox2用来显示最后的结果,是成功了,还是失败了,失败的话会有错误信息;textBox1是要执行的代码,我们可以在运行是复制过来。

下面是我的代码:

            //CodeDomProvider 可用于创建和检索代码生成器和代码编译器的实例。

            //代码生成器可用于以特定的语言生成代码,而代码编译器可用于将代码编译为程序集.

            CodeDomProvider codeProvider = CodeDomProvider.CreateProvider("CSharp");//指定编程语言

            string Output = "Out.exe";//指定最后产生的程序的名字,它将和我们这个程序在一个目录下

            textBox2.Text = "";

            //表示用于调用编译器的参数

            System.CodeDom.Compiler.CompilerParameters parameters = new CompilerParameters();

            //获取或设置一个值,该值指示是否生成可执行文件。true表示EXE, false表示 DLL

            parameters.GenerateExecutable = true;

            //获取或设置输出程序集的名称。

            parameters.OutputAssembly = Output;

            //获取或设置一个值,该值指示是否在已编译的可执行文件中包含调试信息。

            parameters.IncludeDebugInformation = true;

            //获取当前项目所引用的程序集。根据具体需要添加

            parameters.ReferencedAssemblies.Add("system.dll");

            parameters.ReferencedAssemblies.Add("system.data.dll");

            parameters.ReferencedAssemblies.Add("system.Drawing.dll");

            parameters.ReferencedAssemblies.Add("system.Windows.Forms.dll");

            parameters.ReferencedAssemblies.Add("Interop.IWshRuntimeLibrary.dll");

            //CompileAssemblyFromSource方法从包含源代码的字符串的指定数组,使用指定的编译器设置编译程序集。

            //CompilerResults表示从编译器返回的编译结果

            CompilerResults results = codeProvider.CompileAssemblyFromSource(parameters, textBox1.Text);

            //获取编译器错误和警告的个数

            if (results.Errors.Count > 0)

            {

                foreach (CompilerError CompErr in results.Errors)

                {

                    textBox2.Text = textBox2.Text +

                                "Line number " + CompErr.Line +

                                ", Error Number: " + CompErr.ErrorNumber +

                                ", '" + CompErr.ErrorText + ";" +

                                Environment.NewLine + Environment.NewLine;

                }

            }

            else

            {

                //成功了

                textBox2.Text = "Success!";

### 回答1: 语言编写的应用程序可以在哪些平台上运行? 通过使用C语言编写的应用程序可以在许多不同的平台上运行,包括计算机操作系统(如Windows,Mac OS,Linux),嵌入式系统,移动设备等等。C语言的通用性使得它成为最常用的编程语言之一,广泛应用于各种不同的计算机领域。 ### 回答2: C语言是一种高级编程语言,广泛用于系统软件和应用软件的开发。它具有简单、高效、可移植等特点,因此被广泛应用于各种计算机领域。 首先,C语言具有简洁明了的语法和丰富的函数库,使得开发者能够快速编写出高效的代码。C语言采用结构化编程思想,支持模块化设计,使得程序更易于理解和控制。同时,C语言的基本数据类型和运算符丰富,能够完成各种复杂的计算任务。 其次,C语言具有高度的可移植性。C语言的标准库是跨平台的,因此只需对特定的系统进行少量的适配即可在不同的平台上运行。这种可移植性使得C语言成为编写系统软件的首选语言,例如操作系统和嵌入式系统等。 最后,C语言的性能优越。C语言编译生成的机器码执行效率高,这使得C语言成为开发对性能要求较高的应用程序的理想选择。此外,C语言还提供了底层的内存访问和指针操作,使得程序员可以更加灵活地控制计算机硬件资源,从而进一步提升程序的性能。 总而言之,C语言是一种功能强大、可移植、高效的编程语言,适用于广泛的应用领域。无论是初学者还是专业开发者,掌握C语言都是非常有益的。同时,C语言也为学习其他高级语言奠定了坚实的基础,是编程领域的重要入门语言。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值