c++ - 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。
解决方案
VS 2017 构建工具失败并出现错误 MSB4019:未找到导入的项目“D:\Microsoft.Cpp.Default.props”
尝试VCTargetsPath
从您的构建配置显式作为属性传递给 msbuild:
编辑构建的构建定义。
单击进程选项卡。
在 Advanced 部分中,设置 MSBuild Arguments 以包含以下属性:
/p:VCTargetsPath="C:\Program Files (x86)\Microsoft Visual Studio\2017\xxx\Common7\IDE\VC\VCTargets\"
保存构建定义。
注意:您应该将 的值更改为文件夹VCTargetsPath
的位置。VCTargets
或作为属性传递VisualStudioVersion
给 msbuild:/p:VisualStudioVersion=15.0
如果您对 的值感兴趣$(VCTargetsPath)
,可以查看以下线程以获取更多详细信息:
多年来,可以使用注册表项发现 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。
推荐阅读
- devops - 使用 curl 在 artifactory 中搜索工件
- sql - SQL JOIN 以比较表“A”中的两个值/行和表“B”中的同一行
- javascript - 我们可以从 javascript 代码中强制启用谷歌浏览器的“允许所有 cookie”吗
- swiftui - 使用 PageTabViewStyle 在 TabView 中正确禁用对 UIPageControl 的触摸
- typescript - 在 CDK 中将 AWS Step Functions 与 API Gateway 集成时遇到问题
- c++ - 如何找到 Visual Studio 正在调用的确切编译器可执行文件?
- apache-nifi - 无法导入在 Git 存储库中提交的 Nifi Registry 流
- python - ValueError:层顺序的输入 0 与层不兼容::预期 min_ndim=4,发现 ndim=3。收到的完整形状:[8, 28, 28]
- docker - 如何在本地构建和运行 Druid
- node.js - 使用 electron 或 node.js 将文件存储在本地驱动器文件夹中