我的系统上安装了两个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中的工具?
答案 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变量。