При помощи .NET можно не только запустить консольное приложение, но и получить результат его работы (вывод). Рассмотрим, как это можно сделать на примере консольной сборки решения Visual Studio.
Для того, чтобы собрать решение в консоли на .NET необходимо вызвать команду dotnet build и передать ей в качестве параметра путь к файлу решения.
1 |
dotnet build C:\MySolutionFolder\MySolution.sln |
Реализуем вызов данной команды средствами C#. Для этого нам потребуется стандартный класс Process из пространства имён System.Diagnostics. Принцип его использования для решения данной задачи приведён в примере ниже с пояснениями в виде комментариев к коду.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
// Создаём объект процесса. 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.
1 2 3 4 |
while (!builderProcess.StandardOutput.EndOfStream) { textBoxOutput.Text+=$”{builderProcess.StandardOutput.ReadLine()}\n\r”; } |
Приведенным выше способом, можно запустить любую консольную программу или команду и получить результат её работы в своём приложении.
Добавить комментарий