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

当我运行msbuildbuild立一个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 show MSBuildExtensionsPath32,MSBuildExtensionsPath64,MSBuildExtensionsPath设置为开始构build时的环境
  • 在shell中设置MSBuildExtensionsPath32,MSBuildExtensionsPath64,MSBuildExtensionsPath设置为环境variables不会导致它们在构build开始时显示为Environment

修复尝试

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

看来MSBuildExtensionsPath32没有被正确设置,并且设置MSBuildExtensionsPath没有帮助

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

请让我知道,如果你有什么想法阻碍了这个variables的正确设置。

谢谢

彼得

当使用他们的命令行工具发布一个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 

对于那些不遵循MS禁止令的人(见Xv的回答 ),你仍然可以解决这个问题。

MSBuild使用VCTargetsPath来find默认的cpp属性,但不能因为registry缺less这个string值。

检查string值

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

修理

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

注意: HKLM代表HKEY_LOCAL_MACHINE

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

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

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

在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手动设置MSBuildExtensionsPath (注意在64位机器上的x86部分)

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

npm install --global windows-build-tools

它安装了编译大多数节点模块所需的Python&VS Build工具。 它工作的一种享受!

为Windows SDK 7.1安装Microsoft Visual C ++ 2010 Service Pack 1编译器更新为我工作。 不过,我遇到了更新问题,因为我已经安装了VS 2010和VS 2010 SP1。 如上面Xv所述,readme.htm文件包含“已知问题”部分中最常见安装问题的解决scheme。 我将按照readme.htm中的说明进行操作,并在每次故障排除尝试后重新启动计算机,因为有些安装会写入registry。

我遇到了这个错误,编写一个生成脚本,将recursion挖掘任何find的MSBuild.exe文件的C:\ Windows \ Microsoft.NET文件夹后将MSBuild放在%PATH%。 最后find的命中是放在path上的目录。 由于dir命令会在Framework64之后碰到Framework64文件夹,我得到了放在我path上的64位MSBuild之一。 我试图构build一个Visual Studio 2010解决scheme,并最终将searchstring从C:\Windows\Microsoft.NET更改为C:\Windows\Microsoft.NET\Framework这样我就可以使用32位MSBuild.exe了。 现在我的解决scheme文件build立。

我刚添加VCTargetsPath={c:\...}作为我的Hudson作业的环境variables。

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

MSBuild需要configuration文件,编译器等(一个工具集),匹配将使用它的Visual Studio或TFS的版本,以及将编译源代码的.NET版本。

根据MSBuild的安装方式,configuration文件可能位于一个或多个path中。

  • 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 \

正如其他答案中所述,registry项目和/或环境variables点必须到ToolSetpath。

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

偶尔,像安装工具这样的操作会使registry和/或环境variables设置不正确。 其他答案是修复它们的所有变化。

我唯一需要补充的是环境variables对我来说不起作用,

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

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