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的有用颜色丢失了.我想保存它们.
p.OutputDataReceived += (s, e) => Console.WriteLine(e.Data);
Run Code Online (Sandbox Code Playgroud)
Process.OutputDataReceived读取文本,而不是颜色.输出重定向功能位于此仅重定向标准输出文本下方,而不是控制台颜色属性.当您使用>
命令行中的重定向运算符运行msbuild 以将其输出发送到文本文件时,您会得到完全相同的结果.当您在记事本中打开文本文件时,您当然会看到平淡无奇的文本.
解析重定向的输出以重新着色您自己的输出是非常不切实际的.你被困在了.然后,程序员不会经常抱怨IDE中错误列表窗口的外观:)