是否可以防止MSBuild打印彩色输出

时间:2012-02-29 16:38:57

标签: msbuild console

我的Windows shell配置为在白色背景上显示黑色文本。这使得几乎不可能读取默认的msbuild输出,因为颜色非常浅(特别是黄色警告)。

因此,我想尝试下列其中一项,但如果可能,我无法解决。

  1. 我想设置一个全局设置来永久关闭msbuild中的colourized输出;或
  2. 如果(1)不可能,可以在每次调用时转换此输出(例如,使用命令行参数)。
  3. 有谁知道如何做以上其中一项?

2 个答案:

答案 0 :(得分:1)

MSBuild 4.0 中,可以使用/consoleloggerparameters/clp开关:

msbuild C:\some_path\your.sln /clp:disableconsolecolor

或者,对于以前的MSBuild引擎,可以使用 PowerShell

Out-Host将显示默认颜色:

Powershell -Command "msbuild C:\some_path\your.sln | out-host"

Write-Host可让您自定义颜色:

Powershell -Command "msbuild C:\some_path\your.sln | write-host -foreground "white""

答案 1 :(得分:0)

要完全禁用颜色,请在调用/clp:disableconsolecolor时使用MSBuild.exe选项(有关/clp选项运行MSBuild.exe /?的更多信息)。

更新,因为@KMoraz已经评论过,并更新了他的答案,这只适用于MSBuild 4.0以上。

如果要禁用颜色输出,还可以使用以下颜色(使用MSBuild 4.0):

MSBuild.exe arguments > CON 2>&1

这让我很好奇;-)所以这里还有一个选项可以适用于所有版本的MSBuild.exe,并且不依赖于CON重定向:

MSBuild.exe arguments 2>&1| findstr /r ".*"

基本上,所发生的是所有输出行都通过findstr.exe传输,因为它使用模式匹配“所有”,所有行都只是再次输出,但丢失了它们的属性(颜色)信息。在我的测试中,2>&1(重定向stderr到stdout)并不是必需的,因为它看起来MSBuild没有向stderr输出任何(彩色)消息,但我添加了它以便进行测量。