从ASP.NET网站编译代码

时间:2011-02-13 06:36:31

标签: asp.net .net compilation roslyn

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

我该怎么做?

3 个答案:

答案 0 :(得分:6)

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

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

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

这只是冰山一角。

回答您的评论,是的,C#和VB .NET有一个名为CodeDOM的编译器API。
网上有很多关于它的信息。您可能还想查看this question

答案 1 :(得分:0)

您可能希望查看昨天发布的http://msdn.microsoft.com/en-us/roslyn的Roslyn项目(以前称为编译器即服务)。这是C#和VB的新编译器API。它对Python或Ruby没有帮助,但是一旦发布它就应该做你需要的C#和VB(在Dev 11之后)。

答案 2 :(得分:0)

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