132

当我运行 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 as good system 时显示 MSBuildExtensionsPath32、MSBuildExtensionsPath64、MSBuildExtensionsPath在构建开始时设置为 Environment
  • 将 MSBuildExtensionsPath32、MSBuildExtensionsPath64、MSBuildExtensionsPath 设置为 shell 中的环境变量不会导致它们在构建开始时显示为环境

已尝试修复

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

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

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

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

4

22 回答 22

78

我在使用他们的命令行工具(调用 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
于 2014-12-24T03:28:13.870 回答
50

对于那些不遵循 MS 禁止命令的人(请参阅Xv 的回答),您仍然可以解决问题。

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.

于 2013-04-25T18:27:28.793 回答
26

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

npm install --global windows-build-tools

它安装了编译大多数节点模块所需的 Python 和 VS 构建工具。它奏效了!

于 2017-01-03T23:22:52.093 回答
21

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

这里的很多答案都适用于旧版本的 Visual Studio。如果使用 Visual Studio 2017 Community 版本,对我有用的是设置一个名为的环境变量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
于 2019-01-19T20:09:44.557 回答
13

为 Windows SDK 7.1安装Microsoft Visual C++ 2010 Service Pack 1 编译器更新修复了MSB4019我在 Windows7 x64 上构建的错误。

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

  1. 视觉工作室 2010
  2. 视窗 SDK 7.1
  3. 视觉工作室 2010 SP1
  4. 适用于 Windows SDK 7.1 的 Visual C++ 2010 SP1 编译器更新
于 2013-04-25T11:22:00.583 回答
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如上手动设置(注意x8664位机器上的部分)
于 2013-04-18T21:30:57.157 回答
5

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

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

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

  • C:\Program 文件 (x86)\MSBuild\Microsoft.Cpp\v4.0\
  • C:\Program 文件 (x86)\MSBuild\Microsoft.Cpp\v4.0\V120\
  • C:\Program 文件 (x86)\MSBuild\Microsoft.Cpp\v4.0\V140\

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

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

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

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

于 2017-01-22T02:05:21.790 回答
5

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

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

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

VCTargetsPath

有价值

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

在注册表路径中

HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\14.0

于 2018-07-05T11:17:26.740 回答
4

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\\'))"
于 2018-08-17T16:23:09.687 回答
4

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

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

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

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

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

更多提示:

于 2018-10-11T15:15:36.383 回答
2

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

于 2014-05-01T18:28:50.313 回答
2

除了将路径设置为:

C:\Program Files\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0
于 2018-09-28T13:09:57.653 回答
2

就我而言,我添加了一个VCTargetPath带路径的环境变量

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

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

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

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

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

于 2019-12-17T11:42:21.103 回答
0

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

于 2015-11-09T23:41:38.400 回答
0

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

于 2016-04-01T10:34:59.997 回答
0

作为记录,该文件Microsoft.Cpp.Default.props可以修改 env varVCTargetsPath并使该 var 的后续使用不正确。我遇到了这个问题,并通过将VCTargetsPath10和设置VCTargetsPath11为与VCTargetsPath.

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

于 2017-05-29T15:12:50.690 回答
0

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

set VCTargetsPath=%VCIDEInstallDir%VCTargets
于 2018-02-12T19:23:39.303 回答
0

添加到上面关于 VS2017/2019 的 Chris Gong 的回答(我还没有评论权限)。

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

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

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

于 2019-08-12T19:31:41.020 回答
0

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

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

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

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

这解决了我的问题。

于 2019-08-14T11:47:49.240 回答
0

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

SET VCTargetsPath=$(VCTargetsPath)

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

于 2020-02-13T14:55:35.733 回答
0

我把安装部分弄乱了,所以我卸载了 VSCode。一年前,我安装了一些其他版本,最近又安装了另一个。因此,在卸载所有内容后,从头开始。下载最新版本的 VSCode 和构建工具。然后它工作得很好。

于 2021-03-10T17:18:36.577 回答
0

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

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

set VCTargetsPath=
call %ProgramFiles(x86)%/Microsoft Visual Studio/2019/Professional/MSBuild/Current/Bin\msbuild.exe ...
于 2021-05-21T16:21:59.850 回答