TL;DR:Visual Studio 2015 的 MSBuild 是否可以使用直接方法在命令行上更改 MSBuild 的消息语言,而不是弄乱系统设置?如何?
我们有一个来自“当时的方式”的问题,基本上是重复的,但恕我直言,答案表明这个问题需要改进。
我需要它来为 VS2015 及更高版本工作,所以我不太关心旧版本。
所以,这里有一些事实:
- 谷歌搜索不会显示任何 会更改输出消息语言的MSBuild 命令行选项。
- 在德语系统上从命令行使用 MSBuild 会给我德语错误消息。
- 在同一系统上使用英语 Visual Studio 调用 MSBuild将使
MSBuild.exe
MSBuild(从进程资源管理器进程树中确认 的实际)在德语系统上输出英语消息!- 这意味着
devenv.exe
能够驱动MSBuild.exe
使用不同的语言。
- 这意味着
以机智:
c:\temp\TestApp>msbuild TestApp.sln /t:rebuild /v:normal
Microsoft (R)-Buildmodul, Version 14.0.25420.1
Copyright (C) Microsoft Corporation. Alle Rechte vorbehalten.
Die Projekte in dieser Projektmappe werden nacheinander erstellt. Um eine parallele Erstellung zu ermöglichen, müssen Sie den Schalter "/m"
hinzufügen.
Der Buildvorgang wurde am 18.10.2016 11:06:33 gestartet.
Projekt "c:\temp\TestApp\TestApp.sln" auf Knoten "1", rebuild Ziel(e).
ValidateSolutionConfiguration:
Die Projektmappenkonfiguration "Debug|X64" wird erstellt.
Das Projekt "c:\temp\TestApp\TestApp.sln" (1) erstellt "c:\temp\TestApp\TestApp\TestApp.csproj" (2) auf Knoten "1", Rebuild Ziel(e).
CoreClean:
Die Datei "C:\temp\TestApp\TestApp\bin\x64\Debug\TestApp.exe.config" wird gelöscht.
...
GenerateBindingRedirects:
Keine vorgeschlagenen BindingRedirect-Einträge von ResolveAssemblyReferences.
GenerateTargetFrameworkMonikerAttribute:
Das Ziel "GenerateTargetFrameworkMonikerAttribute" wird übersprungen, da alle Ausgabedateien hinsichtlich der Eingabedateien aktuell sind.
CoreCompile:
...
并从devenv
:
c:\temp\TestApp>devenv.com /Rebuild "Debug|x64" TestApp.sln
Microsoft Visual Studio 2015 Version 14.0.25420.1.
Copyright (C) Microsoft Corp. All rights reserved.
1>------ Rebuild All started: Project: TestApp, Configuration: Debug x64 ------
1>Build started 18.10.2016 11:10:27.
1>CoreClean:
1> Deleting file "C:\temp\TestApp\TestApp\bin\x64\Debug\TestApp.exe.config".
...
1>CoreCompile:
...
显然,devenv 在这里驱动输出,但实际的 msbuild 消息是相同的,并且 devenv 将调用MSBuild.exe 作为实际的子进程。
我已经检查过 Process explorer:调用的 MSBuild.exe 没有任何命令行参数指示正在使用的项目,也没有任何明显的环境变量集。因此,似乎 devenv 正在通过其他方式“告诉”MSBBuild 使用英语作为语言。
旁注 MSBuild 是从 VS 调用的,如下所示:C:\Program Files (x86)\MSBuild\14.0\bin\MSBuild.exe /nologo /nodemode:1 /nodeReuse:true
那么,我怎么MSBuild.exe
知道它应该是英文输出呢?我对任何包装器方法或一些 powershell 魔法都很好(尽管这似乎不太可能),但我不适合为此依赖机器/用户区域设置。
另外,我发现了一个 MSDN 线程,答案是——8 年前——VS 可以这样做,因为它设置了 UI 文化——但如果 devenv 可以这样做,因为它被调用了 msbuild.exe我可能也可以:我只是不知道怎么做。