Пример из MSDNProcess compiler = new Process();
compiler.StartInfo.FileName = "csc.exe";
compiler.StartInfo.Arguments = "/r:System.dll /out:sample.exe stdstr.cs";
compiler.StartInfo.UseShellExecute = false;
compiler.StartInfo.RedirectStandardOutput = true;
compiler.Start();
Console.WriteLine(compiler.StandardOutput.ReadToEnd());
compiler.WaitForExit();
UseShellExecute должен быть обязательно установлен в False, иначе не будет работать.
Аналогично можно использовать compiler.StandardIntput, чтобы давать входные данные, как будто из консоли.