【问题标题】:MSBuild doesn't work in VS2017 for VS2015 (v140) toolkitMSBuild 在 VS2017 中不适用于 VS2015 (v140) 工具包
【发布时间】:2018-02-22 17:35:50
【问题描述】:

我已经安装了带有 v141 (2017) 和 v140(2015) 工具包的 VS2017。

很遗憾,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: The build tools for v140 (Platform工具集 = '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 命令提示符运行同一个项目时,编译工作没有任何问题。

【问题讨论】:

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


    【解决方案1】:

    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
    

    【讨论】:

    • 感谢您的回复和提示,我刚刚找到了解决方案。因为我试图在 VS2017 环境中使用 v140,所以使用 vcvars32.bat 是不够的。最重要的事情(你没有提到它)是使用 -vcvars_ver= 参数。因此,v140 工具包的完整命令是“vcvarsall.bat x86 -vcvars_ver=14.0”。只有这样,您才能获得正确配置的 14.0 环境。
    • 请将其添加到您的答案中,我将选择它作为接受。
    猜你喜欢
    • 2016-01-14
    • 1970-01-01
    • 2017-01-23
    • 2017-03-05
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 1970-01-01
    • 2014-04-13
    相关资源
    最近更新 更多