Запускаем консольное приложение и получаем его вывод на примере сборки решения (C#)

При помощи .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”;
}

Приведенным выше способом, можно запустить любую консольную программу или команду и получить результат её работы в своём приложении.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *