using CodeEditor.CodeEdit; using Microsoft.CSharp; using System; using System.CodeDom.Compiler; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Reflection; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace CodeEditor { public partial class MainForm : Form { public MainForm() { InitializeComponent(); } private void btnCompile_Click(object sender, EventArgs e) { //【1】新建C#代码生成器和代码编译器的实例 CodeDomProvider Provider = CodeDomProvider.CreateProvider("CSharp"); //【2】配置用于调用编译器的参数 CompilerParameters Parameters = new CompilerParameters(); Parameters.ReferencedAssemblies.Add("System.dll"); Parameters.ReferencedAssemblies.Add("System.Windows.Forms.dll"); Parameters.ReferencedAssemblies.Add("System.Linq.dll"); Parameters.GenerateExecutable = false; Parameters.GenerateInMemory = true; //【3】启动编译 CompilerResults Result = Provider.CompileAssemblyFromSource(Parameters, rtbCode.Text); if (Result.Errors.HasErrors) { AppendInfo("编译错误:"); foreach (CompilerError err in Result.Errors) { AppendInfo(err.ErrorText); } } else { // 通过反射,调用实例 Assembly objAssembly = Result.CompiledAssembly; object objHelloWorld = objAssembly.CreateInstance("CodeEditor.CodeEdit.Code"); MethodInfo objMI = objHelloWorld.GetType().GetMethod("Test"); object ReValue = objMI.Invoke(objHelloWorld, null); AppendInfo(ReValue); } } //追加字符 private void AppendInfo(object Info) { rtbResult.Text =Info+"\n\r"; } } }
时间: 2024-02-14 21:30:35 浏览: 124
Unity创建表格Aspose.Words插件和system.drawing插入图片
5星 · 资源好评率100%
这段代码是一个简单的代码编辑器程序的主窗体部分。它包含一个按钮(btnCompile)和两个文本框(rtbCode和rtbResult)。当用户点击按钮时,程序会将文本框中的C#代码编译并执行。
在点击按钮事件的处理方法(btnCompile_Click)中,代码首先创建了一个C#代码生成器(CodeDomProvider)和一个代码编译器(CompilerParameters)的实例。然后配置编译器参数,包括引用的程序集和编译选项。接下来,调用编译器的CompileAssemblyFromSource方法,将文本框中的代码作为参数进行编译。
如果编译过程中出现错误,则将错误信息逐一添加到结果文本框(rtbResult)中显示。否则,通过反射获取编译后程序集中的类(CodeEditor.CodeEdit.Code)实例,并调用其中的名为"Test"的方法。最后,将方法返回值添加到结果文本框中显示。
另外,代码中还包括一个私有方法(AppendInfo),用于将信息追加到结果文本框中。
请问你对以上代码有什么疑问吗?
阅读全文