首页 > 解决方案 > VS 2017 构建工具失败并出现错误 MSB4019:找不到导入的项目“D:\Microsoft.Cpp.Default.props”

问题描述

我正在构建一个新的 TFS 构建服务器,并决定使用 VS 2017 构建工具而不是安装 VS 的完整版本。当我尝试构建我们的 C++ 项目时,它会引发以下错误:

Error MSB4019: The imported project "D:\Microsoft.Cpp.Default.props" was not found.

经过几个小时的研究,我离解决这个问题还差得远。我尝试添加以下注册表设置,但没有帮助。

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V140\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V110\'))"
"VCTargetsPath14"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath14)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V140\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0\11.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V110\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V110\'))"

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0\14.0]
"VCTargetsPath"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V140\'))"
"VCTargetsPath11"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath11)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V110\'))"
"VCTargetsPath14"="$([MSBuild]::ValueOrDefault('$(VCTargetsPath14)','$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V140\'))"

我猜这个产品的微软安装程序坏了。是否有针对此错误的标准修复程序,或者我应该放弃我的努力并简单地安装完整版本?

在项目文件中,我找到了这个条目:

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

所以,我猜这意味着变量 VSTargetsPath 以某种方式指向 D: 驱动器的根目录,但我不知道该值的设置位置。我们当前的构建服务器没有名为 VSTargetsPath 的环境变量集,但它确实缺少注册表项。它还安装了完整版本的 VS。

标签: c++visual-studiomsbuildtfsbuild

解决方案


VS 2017 构建工具失败并出现错误 MSB4019:未找到导入的项目“D:\Microsoft.Cpp.Default.props”

尝试VCTargetsPath从您的构建配置显式作为属性传递给 msbuild:

  1. 编辑构建的构建定义。

  2. 单击进程选项卡。

  3. 在 Advanced 部分中,设置 MSBuild Arguments 以包含以下属性:

    /p:VCTargetsPath="C:\Program Files (x86)\Microsoft Visual Studio\2017\xxx\Common7\IDE\VC\VCTargets\"

  4. 保存构建定义。

注意:您应该将 的值更改为文件夹VCTargetsPath的位置。VCTargets

作为属性传递VisualStudioVersion给 msbuild:/p:VisualStudioVersion=15.0

如果您对 的值感兴趣$(VCTargetsPath),可以查看以下线程以获取更多详细信息:

找不到 Visual Studio 2017 的注册表项

Visual Studio 定位器

多年来,可以使用注册表项发现 Visual Studio,但随着最近对部署和可扩展性模型的更改,需要一种新方法来发现可能不止一次安装的实例。这些更改有助于实现更小、更快的默认安装,并辅以其他工作负载和组件的按需安装。

vswhere 被设计为可再分发的单文件可执行文件,可在构建或部署脚本中使用,以查找 Visual Studio(或 Visual Studio 系列中的其他产品)所在的位置。例如,如果您知道 MSBuild 的相对路径,则可以找到 Visual Studio 安装的根目录并组合这些路径以找到所需的内容。

您可以根据脚本可以使用的内容发出不同格式的信息,包括纯文本、JSON 和 XML。其他常见格式也可以接受拉取请求。

自 Visual Studio 2017 版本 15.2 及更高版本起,vswhere 包含在安装程序中,可在以下位置找到:%ProgramFiles(x86)%\Microsoft Visual Studio\Installer\vswhere.exe。


推荐阅读