Попытка передать стандартный ввод в основной метод для оценки кода в Интернете - PullRequest
1 голос
/ 05 января 2012

Я пытаюсь создать веб-приложение для оценки кода .Net онлайн (например, http://ideone.com/) Мне удалось скомпилировать код с CodeDomProvider. Но я не знаю, как передать параметры stdin этой функции.

Если пользователь пишет этот код в текстовой области моего веб-приложения:

using System;
public class Test  {

    static void Main()
    {
        String t = "";
        while (t != null){
           t = Console.ReadLine();
            Console.WriteLine(t+"OK");
        }
     }
}

Я могу скомпилировать его с помощью этого кода CompilerInfo [] allCompilerInfo = CodeDomProvider.GetAllCompilerInfo ();

  //Tell the compiler what language was used
  CodeDomProvider CodeProvider = CodeDomProvider.CreateProvider("C#");

  //Set up our compiler options...
  CompilerParameters CompilerOptions = new CompilerParameters();
  var _with1 = CompilerOptions;
   _with1.ReferencedAssemblies.Add("System.dll");
  _with1.GenerateInMemory = true;
  _with1.TreatWarningsAsErrors = true;

  //Compile the code that is to be evaluated
  CompilerResults Results = CodeProvider.CompileAssemblyFromSource(CompilerOptions, strCode);

Теперь я хотел бы управлять общими параметрами:

Если я передам пример параметра следующим образом:
53
12
09

Я хотел бы получить результат компиляции:
53OK
12OK
09OK

Вы знаете, как это сделать?

1 Ответ

4 голосов
/ 05 января 2012

Когда я интерпретирую вопрос, вы спрашиваете, как запустить и передать данные командной строки стандартного ввода в приложение, которое было скомпилировано на вашем веб-сервере из кода, введенного пользователем в текстовое поле.Чтобы избежать серьезных проблем безопасности при выполнении таких действий, вам нужно запустить приложение с помощью класса System.Diagnostics.Process и указать RedirectStandardInput в свойстве StartInfo.Начните с чтения документов MSDN класса Process: http://msdn.microsoft.com/en-us/library/system.diagnostics.process.aspx

...