对于VS2015(v140)工具包,MSBuild在VS2017中不起作用

时间:2018-02-22 17:35:50

标签: visual-studio-2015 command-line visual-studio-2017 toolkit

我已经安装了VS2017和v141(2017)以及v140(2015)工具包。

不幸的是,MSBUILD命令行不适用于v140工具包。

当我使用“C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ VC \ vcvarsall.bat”时,我收到此错误:

C:\ Program Files(x86)\ MSBuild \ Microsoft.Cpp \ v4.0 \ V120 \ Microsoft.Cpp.Platform.targets(64,5):错误MSB8020:v140的构建工具(平台无法找到Toolset ='v140')。要使用v140构建工具进行构建,请安装v140构建工具。或者,您可以通过选择“项目”菜单或右键单击解决方案,然后选择“升级解决方案...”来升级到当前的Visual Studio工具。 [Q:\ ExternalLibraries \ cryptopp-5.6.5-2015 \ cryptlib.vcxproj]

但是当我在VS IDE中打开相同的项目/解决方案时,我看到该项目已经配置为2015项目,我可以编译它而没有v140工具包的问题。

另外值得注意的是,NMAKE命令行工具没有任何问题。只有MSBUILD才会返回这个奇怪的错误。

为了能够在命令行中使用VS2017中的VS140工具包,我还有什么需要做的吗?

修改

基于IDE中的详细VS登录,似乎IDE默默地忽略工具版本。这是来自日志的错误消息

项目文件包含ToolsVersion =“12.0”。此工具集可能未知或缺失,在这种情况下,您可以通过安装相应版本的MSBuild来解决此问题,或者出于策略原因,可能已将构建强制转换为特定的ToolsVersion。将项目视为具有ToolsVersion =“15.0”。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId=293424

所以我尝试将解决方案升级到最新版本,而不是手动设置v140工具集而不是v141。

但是现在MSBuilds返回以下错误:

“q:\ ExternalLibraries \ cryptopp-5.6.5-2015 \ cryptest.sln”(重建目标)(1) - > “q:\ ExternalLibraries \ cryptopp-5.6.5-2015 \ cryptest.vcxproj.metaproj”(重建目标)(2) - > “q:\ ExternalLibraries \ cryptopp-5.6.5-2015 \ cryptlib.vcxproj”(重建目标)(3) - >   q:\ ExternalLibraries \ cryptopp-5.6.5-2015 \ cryptlib.vcxproj(44,3):错误MSB4019:导入的项目“q:\ Microsoft.Cp 找不到p.Default.props。确认声明中的路径是否正确,文件是否存在 在磁盘上。

提及import元素确实存在于vcxproj中,其中包含以下值

<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />

所以似乎VCTargetsPath没有被填充,因为MSBuild无法找到它。有什么建议吗?

PS:当我从VS2017命令提示符运行同一个项目时,编译没有任何问题。

1 个答案:

答案 0 :(得分:3)

C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat是VS 2015版本,不支持v141

VS 2017现在支持不同版本的并行安装,并且不再共享VS 2015及更早版本的全局MSBuild规则集。您需要使用VS 2017版本的工具/变量来支持v140v141

对于VS 2017 Enterprise,它是C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars32.bat

对于社区,它将是C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars32.bat

要在命令行中使用v140,您需要使用一些其他参数:

vcvarsall.bat x86 -vcvars_ver=14.0