在应用程序中编译C#代码

我想要一些代码来编译我的TextBox中的代码(例如)。 我的意思是我想在运行程序后编译代码。 我怎样才能做到这一点?

看到这篇文章:

http://support.microsoft.com/kb/304655

这是他们提供的示例代码:

var codeProvider = new CSharpCodeProvider(); ICodeCompiler icc = codeProvider.CreateCompiler(); var parameters = new CompilerParameters() { GenerateExecutable = true, OutputAssembly = Output, }; CompilerResults results = icc.CompileAssemblyFromSource(parameters, sourceString); if (results.Errors.Count > 0) { foreach(CompilerError error in results.Errors) { textBox2.Text = textBox2.Text + "Line number " + error.Line + ", Error Number: " + error.ErrorNumber + ", '" + error.ErrorText + ";" + Environment.NewLine + Environment.NewLine ; } } 

正如Aliostad在他的回答中提到的那样,要小心这个解决方案。 您需要确保已编译的代码最终在其自己的AppDomain ,否则您将遇到内存泄漏。

有关如何将代码加载到单独的AppDomain请参阅此相关问题:

如何防止CompileAssemblyFromSource泄漏内存?

看到这里和这里 。

请注意 ,任何编译和加载的代码都无法卸载。 这可能会导致内存泄漏 ,即如果有人不断输入并更改代码并进行编译,程序集就会被加载,最终会耗尽内存。

一种解决方案是创建第二个AppDomain并在其中加载程序集,在不需要时卸载AppDomain。

  • 如何在不打开另一个窗口的情况下将PowerPoint演示文稿嵌入到WPF应用程序中?
  • 使用ContinueWith的TaskCanceledException
  • 优化字符串连接的聚合
  • 为什么System.Diagnostics.Debug.WriteLine在Visual Studio 2010 C#中不起作用?
  • 将时间戳添加到Trace.WriteLine()
  • 用逗号分隔的类似数组的字符串执行存储过程
  • 如何在C#中创建自定义类型数组?
  • 使用LINQ读取Csv
  • 如何引用具有数百万个节点的树中的子节点
  • 设置在WinForms应用程序中打开的控制台窗口的位置
  • 从批处理SQL命令(SQL Server)检索“输出消息”