2

我需要在 ASP.NET 页面上有一个文本框,用户可以在其中粘贴代码并选择一种预设语言(C#、VB.NET、Python、Ruby 等),并且我需要验证代码是否编译成功。如果没有,那么我需要用行号显示错误和警告。

我该怎么做呢?

4

3 回答 3

6

您需要托管各种您希望支持和​​使用其 API 的编译器。如果编译器不公开 API,则需要使用System.Diagnostics.Process它来启动它并获取输出以进行解析。

不过,这远非一项微不足道的任务。
如果你确信你需要这个,问自己几个问题。

  • 您计划支持哪些语言、平台和语言?Python 和 Ruby,您是指它们的 .NET 版本还是要使用它们的标准编译器?有哪些版本?
  • 这些编译器是否有任何公共 API?您需要将它们作为可执行文件运行吗?
  • 如果该站点将被许多用户同时使用,您打算如何分配负载?编译是一个密集的过程,有很多人这样做会使您的服务器过载。另请注意,编译总是需要时间,因此您需要考虑如何将其呈现给用户。您希望它立即启动还是要将用户放入队列中?
  • 什么是用户编码范围?用户输入是否仅限于一种方法内容,还是用户必须编写整个文件?系统是否默认添加任何代码?您如何解析引用,例如 C# 代码?默认情况下是否引用了一些库?

而这只是冰山一角。

回答您的评论,是的,有一个用于 C# 和 VB .NET 的编译器 API,称为CodeDOM
网络上有很多关于它的信息。你可能也想看看这个问题

于 2011-02-13T07:21:19.103 回答
0

您可能想查看昨天发布的http://msdn.microsoft.com/en-us/roslyn上的 Roslyn 项目(以前称为编译器即服务)。这是用于 C# 和 VB 的新编译器 API。它对 Python 或 Ruby 没有帮助,但一旦发布(发布 Dev 11)就可以满足 C# 和 VB 的需求。

于 2011-10-20T17:41:28.390 回答
0

对于 C# 和 VB,使用Roslyn CTP创建 Compilation 对象,然后调用 GetDiagnostics() 方法来确定错误。

于 2011-10-20T17:41:29.337 回答