При помощи .NET можно не только запустить консольное приложение, но и получить результат его работы (вывод). Рассмотрим, как это можно сделать на примере консольной сборки решения Visual Studio.
Для того, чтобы собрать решение в консоли на .NET необходимо вызвать команду dotnet build и передать ей в качестве параметра путь к файлу решения.
dotnet build C:\MySolutionFolder\MySolution.sln
Реализуем вызов данной команды средствами C#. Для этого нам потребуется стандартный класс Process из пространства имён System.Diagnostics. Принцип его использования для решения данной задачи приведён в примере ниже с пояснениями в виде комментариев к коду.
// Создаём объект процесса. Process builderProcess = new Process(); // Указываем исполняемый файл приложения или «cmd», если требуется запустить командную строку. builderProcess.StartInfo.FileName = "cmd"; // Передаём собственно консольную команду с параметрами. builderProcess.StartInfo.Arguments = "dotnet build C:\MySolutionFolder\MySolution.sln "; // Перенаправляем поток вывода консоли в нашу программу. builderProcess.StartInfo.RedirectStandardOutput = true; // Настраиваем кодировку вывода (иначе русскоязычный текст будет нечитаемым). Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); builderProcess.StartInfo.StandardOutputEncoding = Encoding.GetEncoding(866); // Отключаем показ окна консоли. builderProcess.StartInfo.CreateNoWindow = true; // Готовим «буфер» для накопления текстовых данных. var sb = new StringBuilder(); // Запускаем процесс. builderProcess.Start(); // В ходе работы процесса накапливаем выводимую в «консоль» информацию в ранее созданный буфер. while (!builderProcess.StandardOutput.EndOfStream) { sb.Append(builderProcess.StandardOutput.ReadLine()); } // Выводим накопленные данные в виде обычной строки. string sourceOutput = sb.ToString();
Также можно поэтапно выводить данные из консоли, например в TextBox.
while (!builderProcess.StandardOutput.EndOfStream) { textBoxOutput.Text+=$”{builderProcess.StandardOutput.ReadLine()}\n\r”; }
Приведенным выше способом, можно запустить любую консольную программу или команду и получить результат её работы в своём приложении.