为啥 MSBuild 在 C:\ 中查找 Microsoft.Cpp.Default.props 而不是 c:\Program Files (x86)\MSBuild? (错误 MSB4019)

Posted

技术标签:

【中文标题】为啥 MSBuild 在 C:\\ 中查找 Microsoft.Cpp.Default.props 而不是 c:\\Program Files (x86)\\MSBuild? (错误 MSB4019)【英文标题】:Why does MSBuild look in C:\ for Microsoft.Cpp.Default.props instead of c:\Program Files (x86)\MSBuild? ( error MSB4019)为什么 MSBuild 在 C:\ 中查找 Microsoft.Cpp.Default.props 而不是 c:\Program Files (x86)\MSBuild? (错误 MSB4019) 【发布时间】:2013-04-12 02:41:10 【问题描述】:

当我运行 msbuild 来构建一个 vc2010 项目时,我收到以下错误:

error MSB4019: The imported project "C:\Microsoft.Cpp.Default.props" was not found. 
Confirm that the path in the <Import> declaration is correct, and that the file exists 
on disk.
msbuild 位于 c:\Program File (x86)\MSBuild HKLM\SOFTWARE\Wow6432Node\Microsoft\MSBuild\ToolVersions\V4.0 VCTargetsPath 设置为 $(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\ 当运行 msbuild /verbosity:diag 作为良好系统时,显示 MSBuildExtensionsPath32、MSBuildExtensionsPath64、MSBuildExtensionsPath 设置为 构建开始时的环境 在 shell 中将 MSBuildExtensionsPath32、MSBuildExtensionsPath64、MSBuildExtensionsPath 设置为环境变量不会导致它们显示为构建开始时的环境

已尝试修复

卸载.net 4.5,修复.net 4.0 在系统变量中设置 MSBuildExtensionsPath32、MSBuildExtensionsPath64、MSBuildExtensionsPath。

似乎没有正确设置 MSBuildExtensionsPath32 并且设置 MSBuildExtensionsPath 没有帮助

SET MSBuildExtensionsPath="C:\Program Files\MSBuild"

如果您有任何想法阻碍了此变量的正确设置,请告诉我。

【问题讨论】:

太棒了!另一个关于 Visual Studio 安装损坏导致错误的问题,其中有数百种解决方法,每种解决方法都只适用于少数几个场景...... 【参考方案1】:

我在使用他们的命令行工具(调用 MSBuild)发布 cocos2d-x 应用程序时遇到了这个问题。我使用的是Win 7 64位,VS2013 express,cocos2d-x 3.3版,.NET Framework 4.5安装。

我通过在运行 cocos.py 发布命令之前设置以下内容解决了这个问题:

SET VCTargetsPath=C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120

【讨论】:

这帮助我安装了 oracledb 节点包。我按照community.oracle.com/docs/DOC-931127 上的说明进行操作,即便如此,我还是收到了错误 MSB4019,我用这个答案修复了它。 PowerShell 版本:[Environment]::SetEnvironmentVariable("VCTargetsPath", "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140", "Machine") 帮助以 'v4.0' 结尾的路径【参考方案2】:

对于那些没有遵循 MS 禁止命令的人(请参阅 Xv's answer),您仍然可以解决问题。

MSBuild 使用VCTargetsPath 来定位默认 cpp 属性,但由于注册表缺少此字符串值而无法定位。

检查字符串值

启动注册表编辑器 导航到HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0 检查VCTargetsPath 密钥。值应该 = "$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\"

修复

启动 regedit Navigator 到 HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0 添加字符串值VCTargetsPath 将值设置为“$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\

注意:HKLM 代表HKEY_LOCAL_MACHINE

【讨论】:

注册表项已经为我准备好了。我必须定义一个环境变量,将该名称设置为注册表中的值以通过该值:set VCTargetsPath=c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0 对我来说它只适用于这套VCTargetsPath=c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v120 @cmm-user HKLM 代表 HKEY_LOCAL_MACHINE 你绝对应该在 regedit 中有它 VCTargetsPath 不是键,而是字符串值! 对我来说现在是set VCTargetsPath=c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v140【参考方案3】:

我最近遇到了同样的问题,在以不同的顺序安装不同的软件包后,它变得非常混乱。然后我找到了这个 repo - https://github.com/felixrieseberg/windows-build-tools

npm install --global windows-build-tools

它安装了编译大多数节点模块所需的 Python 和 VS 构建工具。这是一种享受!

【讨论】:

好东西,但不幸的是不适用于 Azure。 对于像我这样可能有问题的人。我需要--production 选项。 npm install --global --production windows-build-tools 根据 node-gyp 安装说明:github.com/nodejs/node-gyp【参考方案4】:

适用于 Windows 10 上的 Visual Studio 2017 和 2019

这里的很多答案都适用于旧版本的 Visual Studio。如果使用 Visual Studio 2017 社区版,对我有用的是设置一个名为 VCTargetsPath 的环境变量并为其赋值

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\VC\VCTargets

如果使用 Visual Studio 2019 社区版,

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160

此处的其他答案将此变量设置为c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v140,但我注意到在我的Visual Studio 安装中,我的MSBuild 文件夹中没有名为Microsoft.Cpp 的文件夹。因此,请记住这一点以及上述路径适用于 Visual Studio 2017 的社区版本这一事实。

此外,如果您使用 Visual Studio 2017 社区版,请确保环境变量中的 MSBuild 路径指向正确的 MSBuild 版本,

C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin

如果您使用的是 Visual Studio 2019 社区版,

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin

【讨论】:

我的 VCTargetPath 是 C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\VC\VCTargets 它也可以是Microsoft Visual Studio\2019\BuildTools 或类似的变体——我想除了BuildTools 和Community,您还可以拥有Professional 和Enterprise。 vswhere.exe -products * -property installationPath 将搜索所有组合,并返回所有已安装产品的位置。 'vswhere.exe' is not recognized as an internal or external command, operable program or batch file. @AndrewKoster vswhere 似乎在 C:\ProgramFiles (x86)\Microsoft Visual Studio\Installer\vswhere.exe 中 docs.microsoft.com/en-us/cpp/build/reference/…【参考方案5】:

安装 Microsoft Visual C++ 2010 Service Pack 1 Compiler Update for the Windows SDK 7.1 修复了我在 Windows7 x64 上构建的 MSB4019 错误。

该更新的自述文件指出推荐的顺序是

    Visual Studio 2010 Windows SDK 7.1 Visual Studio 2010 SP1 适用于 Windows SDK 7.1 的 Visual C++ 2010 SP1 编译器更新

【讨论】:

哦,好的。我想出了解决办法。添加缺少的注册表项。我将发布它并更新我的设置文档以遵循此顺序【参考方案6】:

在 64 位系统上,MSBuild 默认具有以下属性(其中 C: 是 SystemDrive):

MSBuildExtensionsPath = C:\Program Files (x86)\MSBuild
MSBuildExtensionsPath32 = C:\Program Files (x86)\MSBuild
MSBuildExtensionsPath64 = C:\Program Files\MSBuild

如果没有,则意味着您安装了一些自定义第三方覆盖目标,或者您的 MSBuild 安装已损坏。

要尝试的事情:

修复 .NET 安装 应用最新的 Visual Studio Service Pack 如上所述手动设置MSBuildExtensionsPath(注意64位机器上的x86部分)

【讨论】:

谢谢,但在以下情况下仍未设置:1) 修复 .net 4.5,2) 卸载 .net 4.5 并修复 4.0。如果我在环境中手动设置它们也不起作用【参考方案7】:

MSBuild 是一个独立的构建工具,经常与其他工具捆绑在一起。它可能已使用 .NET(旧版本)、Visual Studio(新版本)甚至 Team Foundation Build 安装在您的计算机上。

MSBuild 需要与将使用它的 Visual Studio 或 TFS 版本以及编译源代码所依据的 .NET 版本相匹配的配置文件、编译器等(工具集)。

根据 MSBuild 的安装方式,配置文件可能位于其中一个或多个路径中。

C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\ C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\ C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\

如其他答案中所述,注册表项和/或环境变量必须指向 ToolSet 路径。

下的 VCTargetsPath 键 HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0 VCTargetsPath 环境变量。

有时,安装工具等操作会导致注册表和/或环境变量设置不正确。其他答案都是修复它们的所有变体。

我唯一需要补充的是,当我离开尾随时,环境变量对我不起作用

【讨论】:

这个!我们的构建代理有问题,没有完整的 VS2017 安装。我们使用给定的 VC 工具集(而不是单个组件)重新安装了“工作负载”,并且它进行了正确安装。我们怀疑 Visual Studio 安装程序在我们的自定义组件选择安装过程中没有将正确的工具集 v141 放在 VS2017 下。 对我来说,这有助于修复它 - 我使用的脚本“有帮助”找到错误的 msbuild.exe 并明确调用它。【参考方案8】:

我在 Visual Studio 2015 版上遇到过这个问题。当我使用 cmake 生成项目时,出现了此错误。

错误 MSB4019:导入的项目“D:\Microsoft.Cpp.Default.props”不是 找到了

我通过添加一个字符串来修复它

VCTargetsPath

有价值

$(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\V140

在注册表路径中

HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0

【讨论】:

完成了。之后重新启动了cmd,但没有解决问题。【参考方案9】:

MSBuild 键的注册表项对我来说很好用。请务必记住,必须针对 64 位或 32 位分支执行此操作,具体取决于您运行的 MSBuild 版本。我不建议使用环境变量,因为它可能会导致不同版本的 MSBuild 出现问题。

此注册表文件修复了这两种情况:

Windows Registry Editor Version 5.00

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

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

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

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

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

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

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

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

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

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

【讨论】:

【参考方案10】:

编辑:这适用于旧版本的 Visual Studio / MSBuild(特别是 MSVC2015?)。在更现代的版本中,MSBuild 包含在 Visual Studio Build Tools 2019 中,编译器位于不同的位置并以不同的方式进行检测。

这是由于安装的 MSBuild 工具集和注册表设置不匹配。如果您执行以下一项或多项操作,就会发生这种情况:

以错误的顺序安装多个 Visual Studio 版本 卸载一个或多个版本的 Visual Studio 手动更改或修改 Visual Studio 安装的注册表

我所知道的唯一安全可靠的解决方案是重新安装您的操作系统。如果您的项目需要多个版本的 Visual Studio 来构建,请先安装最旧的版本。然后修复你的代码,这样你就可以使用一个工具来构建它,否则你或你的同事很快就会再次陷入同样的​​困境。

如果这不适合您,请先阅读https://***.com/a/41786593/2279059 以更好地了解问题以及各种“解决方案”的实际作用。然后,根据您的 Visual Studio 版本和设置,其他答案之一或它们的变体最终可能会有所帮助。

更多提示:

如果您不想重新安装操作系统但尝试修复注册表,您可能想尝试以下答案:https://***.com/a/38503503/2279059

【讨论】:

【参考方案11】:

安装 Microsoft Visual C++ 2010 Service Pack 1 Compiler Update for the Windows SDK 7.1 对我有用。但是,我遇到了更新问题,因为我已经安装了 VS 2010 和 VS 2010 SP1。如前所述 Xv 以上,readme.htm 文件包含“已知问题”部分中最常见安装问题的解决方案。我会按照 readme.htm 中的说明在每次故障排除尝试后重新启动您的计算机,因为有些安装会写入您的注册表。

【讨论】:

【参考方案12】:

除了将路径设置为:

C:\Program Files\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0

【讨论】:

我应该设置哪个路径?【参考方案13】:

在我的例子中,我添加了一个带有路径的环境变量VCTargetPath

"C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\VC\VCTargets\"

(最后的'\'至关重要,因为项目解决方案文件引用了“Microsoft cpp targets”文件。

此外,从 Visual Studio 2017 开始,MSBUILD 出现在 Visual Studio 中 - 因此,PATH variable 需要更新为

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin

更新 VCTargetPath 和 MSBUILD 的 PATH 变量并构建修复了错误。

【讨论】:

【参考方案14】:

我在编写一个构建脚本时遇到了这个错误,该脚本在递归地挖掘 C:\Windows\Microsoft.NET 文件夹中找到的任何 MSBuild.exe 文件后将 MSBuild 放在 %PATH% 上。最后找到的命中是放在路径上的目录。由于dir 命令会在Framework 之后访问Framework64 文件夹,因此我正在将64 位MSBuild 之一放在我的路径上。我试图构建一个 Visual Studio 2010 解决方案,最终将我的搜索字符串从 C:\Windows\Microsoft.NET 更改为 C:\Windows\Microsoft.NET\Framework,这样我就可以使用 32 位 MSBuild.exe。现在我的解决方案文件生成了。

【讨论】:

【参考方案15】:

我刚刚将 VCTargetsPath=c:\... 作为环境变量添加到我的 Hudson 工作中。

【讨论】:

【参考方案16】:

作为记录,文件Microsoft.Cpp.Default.props 可以修改环境变量VCTargetsPath 并使该变量的后续用法不正确。 我遇到了这个问题并通过将VCTargetsPath10VCTargetsPath11 设置为与VCTargetsPath 相同的值来解决它。

这应该根据你使用的VS版本进行调整。

【讨论】:

【参考方案17】:

我在 VS2017 环境中看到了这一点。我的构建脚本首先调用VsDevCmd.bat,为了解决这个问题,我在VsDevCmd 之后和调用MSBuild 之前设置了VCTargetsPath 环境变量:

set VCTargetsPath=%VCIDEInstallDir%VCTargets

【讨论】:

【参考方案18】:

添加到上面关于 VS2017/2019 的 Chris Gong 的回答(我还没有 cmets 许可)。

如果安装的是 VS 2019 构建工具而不是完整的 Visual Studio,则文件路径会略有不同。 VCTargetsPath 应该是

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160\

还要注意终止反斜杠 - 至少在我的情况下是必需的(TFS2017、VS2019 构建工具)。 PATH 条目的相应更改也是如此。

【讨论】:

【参考方案19】:

我在使用 MSBuild for VS 17 时遇到了同样的问题

我通过以下步骤解决了这个问题:

就我而言,Microsoft.Cpp.Default.props 文件位于 C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\VC\VCTargets 所以我在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0 下的注册表中创建了VCTragetsPath 字符串,其值为 C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\VC\VCTargets

我还让我的 Jenkins 以管理员用户身份运行

这解决了我的问题。

【讨论】:

【参考方案20】:

先在构建后的命令行中尝试以下操作,而不是设置固定路径:

SET VCTargetsPath=$(VCTargetsPath)

变量 '$(VCTargetsPath)' 似乎是一个与 c++ 相关的 visual-studio-macro,它在 c#-sdk-projects 中没有显示为宏,但在那里仍然可用。

【讨论】:

【参考方案21】:

我卸载了 VSCode,因为我搞砸了安装部分。一年前,我安装了一些其他版本,最近又安装了另一个。因此,在卸载所有内容后,从头开始。下载最新版本的 VSCode 和构建工具。然后效果很好。

【讨论】:

【参考方案22】:

我在通过命令行调用 msbuild 并使用 Visual Studio 2019 时遇到问题。

对我有用的是在调用msbuild之前清除环境变量:

set VCTargetsPath=
call %ProgramFiles(x86)%/Microsoft Visual Studio/2019/Professional/MSBuild/Current/Bin\msbuild.exe ...

【讨论】:

以上是关于为啥 MSBuild 在 C:\ 中查找 Microsoft.Cpp.Default.props 而不是 c:\Program Files (x86)\MSBuild? (错误 MSB4019)的主要内容,如果未能解决你的问题,请参考以下文章

为啥 ExcludeFromPackageFolders 不适用于 msbuild?

无法在构建服务器上修改MSBuild 15.0私有注册表

为啥 Visual Studio 2010 (msbuild?) 构建速度不快?

为啥 Msbuild 任务无法部署数据库,但 Exec 工作正常

TFS2010:构建配置问题

为啥我无法使用项目解决方案文件在 Msbuild Teamcity 中构建测试项目?