如何保持msbuild输出的颜色?

Col*_*nic 11 .net c# system.diagnostics process

当我在命令行运行msbuild时,它在控制台中显示漂亮的颜色.

但是当我从C#中运行时Process.Start,输出显示为黑白.我该如何保持颜色?

var info = new ProcessStartInfo("msbuild")
{
    UseShellExecute = false,
    CreateNoWindow = true,
    RedirectStandardError = true,
    RedirectStandardOutput = true,            
};

using (var p = Process.Start(info) )
{
    p.ErrorDataReceived += (s, e) => Console.Error.WriteLine(e.Data);
    p.OutputDataReceived += (s, e) => Console.WriteLine(e.Data);
    p.BeginErrorReadLine();
    p.BeginOutputReadLine();
    p.WaitForExit();
}
Run Code Online (Sandbox Code Playgroud)

而且,虽然我们在这里,但它比我Process.Start之前 运行的重要BeginOutputReadLine吗?输出会丢失吗?


动机,对于那些感兴趣的人.我工作的项目使用自定义构建工具(重新发明轮子imho).它使用msbuild但在复杂的间接层之后(上面的简化模型).Msbuild的有用颜色丢失了.我想保存它们.

Han*_*ant 8

   p.OutputDataReceived += (s, e) => Console.WriteLine(e.Data);
Run Code Online (Sandbox Code Playgroud)

Process.OutputDataReceived读取文本,而不是颜色.输出重定向功能位于此仅重定向标准输出文本下方,而不是控制台颜色属性.当您使用>命令行中的重定向运算符运行msbuild 以将其输出发送到文本文件时,您会得到完全相同的结果.当您在记事本中打开文本文件时,您当然会看到平淡无奇的文本.

解析重定向的输出以重新着色您自己的输出是非常不切实际的.你被困在了.然后,程序员不会经常抱怨IDE中错误列表窗口的外观:)