MSBuild.exe 15.0从错误的Visual Studio目录中调用cl.exe和link.exe

时间:2018-06-28 13:33:46

标签: msbuild visual-studio-2017

我的系统上安装了两个Visual Studio:VS 2015和VS 2017。 我从VS 2017位置显式运行msbuild:

"C:\Program Files (x86)\Microsoft Visual Studio"\2017\WDExpress\MSBuild\15.0\Bin\amd64\msbuild.exe build/binding.sln /p:Configuration=Release;Platform=x64

自从VS 2017调用msbuild以来,我希望它也能采用VS 2017的工具,但它不起作用!

“普通”详细程度级别显示msbuild调用C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ VC \ bin \ x86_amd64 \ cl.exe和C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ VC \ bin \ x86_amd64 \ link.exe,因此它是从错误的较旧VS 2015中获取的。

如果我使用更详细的级别(/ clp:Verbosity = diagnostic),我会发现msbuild也会从错误的位置获取属性文件。消息是:

Property reassignment: $(VCInstallDir_140)="C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\" (previous value: "") at C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\Microsoft.Cpp.Common.props (55,5)

确实的属性文件位于C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ WDExpress \ MSBuild \ 15.0 \ Microsoft.Cpp.Common.props。

PATH变量正确,并且不包含指向较旧VS 2015的任何内容。变量VS140COMNTOOLS未设置。

这是预期的行为吗?如何告诉msbuild使用VS 2017中的工具?

2 个答案:

答案 0 :(得分:0)

  

MSBuild.exe 15.0从错误的Visual Studio目录中调用cl.exe和link.exe

请尝试通过以下方式调用MSBuild: C:\Program Files (x86)\Microsoft Visual Studio\2017\WDExpress\MSBuild\15.0\Bin

并在命令行中添加参数/p:VisualStudioVersion=15.0,例如:

msbuild.exe build/binding.sln /p:Configuration=Release;Platform=x64 /p:VisualStudioVersion=15.0

答案 1 :(得分:0)

我尝试了/p:VisualStudioVersion=15.0选项,但是该选项没有生效。 后来我发现了这种行为的原因是什么:我的* .vcxproj文件带有标签

<PlatformToolset>v140</PlatformToolset>

一旦我将其更改为 v141 ,msbuild就开始正确使用编译器和链接器。因此,事实证明,msbuild首先会考虑此参数,然后才可能会考虑命令行选项或/和PATH变量。