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

时间:2013-04-18 20:10:31

标签: msbuild

当我运行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"

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

21 个答案:

答案 0 :(得分:68)

使用命令行工具发布cocos2d-x应用程序时遇到此问题,该工具调用MSBuild。我使用的是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

答案 1 :(得分:47)

对于那些不遵守MS禁止订单的人(请参阅Xv's answer),您仍然可以解决问题。

MSBuild使用VCTargetsPath来定位默认的cpp属性,但不能,因为注册表缺少此字符串值。

检查字符串值

  • 启动regedit
  • 导航到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

答案 2 :(得分:26)

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

npm install --global windows-build-tools

安装Python&amp; VS构建大多数节点模块所需的构建工具。这是一种享受!

答案 3 :(得分:12)

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

该更新的自述文件指出建议的顺序是

  1. Visual Studio 2010
  2. Windows SDK 7.1
  3. Visual Studio 2010 SP1
  4. Windows SDK 7.1的Visual C ++ 2010 SP1编译器更新

答案 4 :(得分: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部分)

答案 5 :(得分:4)

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

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

我通过添加字符串

对其进行了修复
  

VCTargetsPath

具有价值

  

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

在注册表路径中

  

HKLM \ SOFTWARE \ Microsoft \ MSBuild \ ToolsVersions \ 14.0

答案 6 :(得分:3)

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

MSBuild需要与将使用它的Visual Studio或TFS版本匹配的配置文件,编译器等(ToolSet),以及将针对其编译源代码的.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 \微软\的MSBuild \ ToolsVersions \ 4.0
  • VCTargetsPath环境变量。

有时,安装工具之类的操作会使注册表和/或环境变量设置错误。其他答案都是修复它们的变化。

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

答案 7 :(得分:3)

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\\'))"

答案 8 :(得分:3)

除了将路径设置为:

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

答案 9 :(得分:2)

安装 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中的说明操作,并在每次故障排除尝试后重新启动计算机,因为有些安装会写入您的注册表。

答案 10 :(得分:2)

对于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

答案 11 :(得分:0)

我卸载了 VSCode,因为我搞砸了安装部分。一年前,我安装了一些其他版本,最近又安装了另一个。所以卸载一切后,从头开始。下载最新版本的 VSCode 和构建工具。然后它工作得很好。

答案 12 :(得分:0)

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

SET VCTargetsPath=$(VCTargetsPath)

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

答案 13 :(得分:0)

对于我来说,我添加了一个环境变量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变量并构建可修复该错误。

答案 14 :(得分:0)

我在VS 17的MSBuild上遇到了同样的问题

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

  • 在我的情况下,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以管理员用户身份运行

这解决了我的问题。

答案 15 :(得分:0)

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

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

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

还请注意终止反斜杠-至少就我而言是必需的(TFS2017,VS2019构建工具)。也对PATH条目进行了相应的更改。

答案 16 :(得分:0)

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

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

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

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

更多提示:

答案 17 :(得分:0)

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

set VCTargetsPath=%VCIDEInstallDir%VCTargets

答案 18 :(得分:0)

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

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

答案 19 :(得分:0)

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

答案 20 :(得分:0)

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