【问题标题】:Is it possible to prevent MSBuild printing colourized output是否可以防止 MSBuild 打印彩色输出
【发布时间】:2012-02-29 16:38:56
【问题描述】:

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

因此,我想尝试以下方法之一,但如果可以,我无法解决。

  1. 我想设置一个全局设置来永久关闭 msbuild 中的彩色输出;或
  2. 如果 (1) 不可行,是否可以在每次调用时转换此输出(例如,使用命令行参数)。

有谁知道如何做上述之一?

【问题讨论】:

  • 请注意,这与this one 的问题有些重复/相关。我不主张关闭它,但您可能也想看看另一个。

标签: msbuild console


【解决方案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""

【讨论】:

  • 是否可以完全禁用输出?但是从 >
【解决方案2】:

要完全禁用颜色,请在调用MSBuild.exe 时使用/clp:disableconsolecolor 选项(有关/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 输出任何(彩色)消息,但我添加了它是为了更好地衡量。

【讨论】:

    猜你喜欢
    • 2021-05-06
    • 2021-09-28
    • 2012-11-20
    • 2013-09-10
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2011-05-03
    • 2014-08-11
    相关资源
    最近更新 更多