重定向但也显示进程输出流

use*_*667 5 c# redirect stdout process

我正在运行构建,我希望能够在发生这种情况时查看进度.但是如果构建有错误,我还想保存输出.

我知道我可以使用Process.UseShellExecute = false,RedirectStandardOutput但是,这只是故事的一部分.

我怎样才能做到这一点?

Den*_*nis 2

更新

正如 Greg 在下面的评论中提到的,MSBuild 可以写入日志文件,同时也可以开箱即用地输出到控制台。

MSBuild [options] /filelogger /fileloggerparameters:LogFile=MSBuildLog.txt
Run Code Online (Sandbox Code Playgroud)

尝试以下简单的 C# 程序。它将获取重定向的 STDIN ( Console.In) 并将其写入一个或多个文件和 STDOUT ( Console.Out)。

using System;
using System.Collections.Generic;
using System.IO;

namespace RedirectToFile
{
    class Program
    {
        static void Main(string[] args)
        {
            var buffer = new char[100];
            var outputs = new List<TextWriter>();

            foreach (var file in args)
                outputs.Add(new StreamWriter(file));

            outputs.Add(Console.Out);

            int bytesRead;
            do
            {
                bytesRead = Console.In.ReadBlock(buffer, 0, buffer.Length);
                outputs.ForEach(o => o.Write(buffer, 0, bytesRead));
            } while (bytesRead == buffer.Length);

            outputs.ForEach(o => o.Close());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用它将 MSBuild 批处理文件的输出重定向到磁盘,同时仍然输出到控制台窗口。

Usage: MSBuild [options] | RedirectToFile.exe MSBuildLog.txt
Run Code Online (Sandbox Code Playgroud)