Компиляция кода с веб-сайта ASP.NET - PullRequest
2 голосов
/ 13 февраля 2011

Мне нужно иметь текстовое поле на странице ASP.NET, в которое пользователь вставил бы код и выбрал один из предустановленных языков (C #, VB.NET, Python, Ruby и т. Д.), И мне нужно проверить, компилируется ли код успешно. Если это не так, то мне нужно показать ошибки и предупреждения с номерами строк.

Как мне это сделать?

Ответы [ 3 ]

6 голосов
/ 13 февраля 2011

Вам понадобится разместить все виды компиляторов, которые вы хотели бы поддерживать, и использовать их API.Если компилятор не предоставляет API, вам нужно использовать System.Diagnostics.Process для его запуска и получить выходные данные для разбора.

Хотя это далеко не тривиальная задача.
Если вы 'Вы уверены, что вам это нужно, задайте себе несколько вопросов.

  • Какие языки, платформы и языки вы планируете поддерживать?Python и Ruby, вы имеете в виду их версии .NET или хотите использовать их стандартные компиляторы?Какие версии?
  • Есть ли у этих компиляторов публичные API?Вам нужно будет запускать их как исполняемые файлы?
  • Если сайт будет использоваться многими пользователями одновременно, как вы планируете распределить нагрузку?Компиляция - это интенсивный процесс, и если много людей это сделает, ваш сервер будет перегружен.Также обратите внимание, что компиляция всегда занимает много времени, поэтому вам нужно подумать, как представить ее пользователю.Вы хотите, чтобы он начался немедленно, или вы хотите поместить пользователей в очередь?
  • Какова область кодирования пользователя?Пользовательский ввод ограничен одним содержимым метода, или пользователь должен написать весь файл?Любой код добавлен системой по умолчанию?Как вы решаете ссылки, например, для кода C #?Есть ли ссылки на некоторые библиотеки по умолчанию?

И это только верхушка айсберга.

Отвечая на ваш комментарий, да, есть API компилятора для C # и VB .NET, которыйназывается CodeDOM .
В сети достаточно информации об этом.Вы можете также проверить этот вопрос .

0 голосов
/ 20 октября 2011

Для C # и VB, используя Roslyn CTP для создания объекта Compilation, затем вызовите метод GetDiagnostics () для определения ошибок.

0 голосов
/ 20 октября 2011

Возможно, вы захотите взглянуть на проект Roslyn (ранее Compiler as a Service) по адресу http://msdn.microsoft.com/en-us/roslyn, который был выпущен вчера. Это новые API компилятора для C # и VB. Это не поможет для Python или Ruby, но должно сделать то, что вам нужно для C # и VB, как только оно выйдет (пост Dev 11).

...