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

Chr*_*ler 2 c++ msbuild tfsbuild visual-studio

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

Error MSB4019: The imported project "D:\Microsoft.Cpp.Default.props" was not found.
Run Code Online (Sandbox Code Playgroud)

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

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\'))"
Run Code Online (Sandbox Code Playgroud)

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

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

<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
Run Code Online (Sandbox Code Playgroud)

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

Leo*_*SFT 5

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

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

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

  2. 单击进程选项卡。

  3. 在“高级”部分中,将 MSBuild 参数设置为包括以下属性:

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

  4. 保存构建定义。

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

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

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

找不到 Visual Studio 2017 的注册表项

Visual Studio 定位器

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

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

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

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