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


124

当我运行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设置为Environment
  • 在外壳程序中将MSBuildExtensionsPath32,MSBuildExtensionsPath64,MSBuildExtensionsPath设置为环境变量不会导致它们在构建开始时显示为Environment

尝试修复

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

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

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

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


6
大!另一个有关因损坏的Visual Studio安装而导致的错误的问题,该解决方案具有数百种只能在某些特定情况下工作的解决方法...
Florian Winter

Answers:


75

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

我通过在运行cocos.py publish命令之前设置以下内容来解决此问题:

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

这帮助我安装了oracledb节点软件包。我遵循了community.oracle.com/docs/DOC-931127上的说明,即使这样我也得到了错误MSB4019,已通过此答案进行了修复。
Pedro Otero

1
PowerShell版本:[Environment]::SetEnvironmentVariable("VCTargetsPath", "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140", "Machine")
菲亚特

帮助路径以“ v4.0”结尾
亚历山大

50

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

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

检查字符串值

  • 启动注册
  • 导航到 HKLM\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0
  • 检查VCTargetsPath钥匙。该值应=“ $(MSBuildExtensionsPath32)\Microsoft.Cpp\v4.0\

修理

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

注意:HKLM代表HKEY_LOCAL_MACHINE


12
注册表项已经在我这里了。我必须定义一个名称设置为注册表中值的环境变量才能通过该变量:set VCTargetsPath=c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0
elmotec

12
对我来说,它仅适用于此VCTargetsPath=c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v120
场景-ygaradon

1
@ cmm-user HKLM代表HKEY_LOCAL_MACHINE您肯定应该在regedit中拥有它
Michael Johnston

4
VCTargetsPath不是键,而是字符串值!
约翰·史密斯

5
对我而言,现在是set VCTargetsPath=c:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\v140
Daniel Gray

26

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

npm install --global windows-build-tools

它安装了编译大多数节点模块所需的Python和VS Build工具。它很好吃!


1
好东西,但不幸的是不适用于Azure。
Aleksey Kontsevich

6
对于那些可能会遇到像我这样的问题的人。我需要--production选择。 npm install --global --production windows-build-tools 按照node- gyp
eliotRosewater '18

15

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

1
在我的系统中,VCTargetPath是C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ BuildTools \ Common7 \ IDE \ VC \ VCTargets
Madura Pradeep

1
它也可能是Microsoft Visual Studio\2019\BuildTools或类似的变体-我想除了BuildTools和Community以外,您还可以拥有Professional和Enterprise。vswhere.exe -products * -property installationPath将搜索所有组合,并返回所有已安装产品的位置。
MSalters

1
'vswhere.exe' is not recognized as an internal or external command, operable program or batch file.
安德鲁·科斯特


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位计算机上的部件)

2
谢谢,但是之后仍然没有设置:1)修复.net 4.5,2)卸载.net 4.5并修复4.0。如果我在环境中手动设置它们也不起作用
Peter Kahn

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


做完了 之后重新启动cmd,但不能解决问题。

4

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路径。

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

有时,诸如安装工具之类的操作将导致注册表和/或环境变量的设置不正确。其他答案都是解决它们的变体。

我唯一要添加的是,当我离开结尾的\时,环境变量对我不起作用。


这个!没有完整的VS2017安装,我们的构建代理存在问题。我们使用给定的VC工具集(而不是单个组件)重新安装了“工作负载”,并且安装正确。我们怀疑在我们的自定义组件选择安装过程中,Visual Studio安装程序未在VS2017下放置正确的工具集v141。
拉斯·佩拉林

对我来说,这有助于修复它-我正在使用的脚本“有帮助”地找到了错误的msbuild.exe并进行了显式调用。
斯科韦塔

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


3

编辑:这适用于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版本和设置,其他答案之一或它们的最终版本可能会有所帮助。

更多提示:



2

就我而言,我在环境变量中添加了VCTargetPathpath

“ 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变量并构建可修复错误。


0

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


0

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


0

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

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


0

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

set VCTargetsPath=%VCIDEInstallDir%VCTargets

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条目进行了相应的更改。


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使用value 创建了字符串 C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\VC\VCTargets

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

这解决了我的问题。


0

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

SET VCTargetsPath=$(VCTargetsPath)

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.