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

Pet*_*ahn 119 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.
Run Code Online (Sandbox Code Playgroud)
  • 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设置为shell中的环境变量不会导致它们在构建开始时显示为Environment

修复已尝试

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

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

SET MSBuildExtensionsPath="C:\Program Files\MSBuild"
Run Code Online (Sandbox Code Playgroud)

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

小智 73

我在使用命令行工具发布cocos2d-x应用程序时遇到此问题,该工具调用MSBuild.我使用的是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
Run Code Online (Sandbox Code Playgroud)

  • Express 2015更改为V140,也可以使用.:) (11认同)
  • PowerShell 版本:`[Environment]::SetEnvironmentVariable("VCTargetsPath", "C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\V140", "Machine")` (3认同)

Pet*_*ahn 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.

  • 注册表项已经在我身边了.我必须定义一个环境变量,该名称设置为注册表中的值以超过该值:`set VCTargetsPath = c:\ Program Files(x86)\ MSBuild\Microsoft.Cpp\v4.0` (11认同)
  • 对我来说它只适用于这个集合`VCTargetsPath = c:\ Program Files(x86)\ MSBuild\Microsoft.Cpp\v4.0\v120` (11认同)
  • 对我来说,它现在是`set VCTargetsPath = c:\ Program Files(x86)\ MSBuild\Microsoft.Cpp\v4.0\v140` (5认同)
  • VCTargetsPath不是键,而是字符串值! (4认同)
  • 我在regedit中找不到HKLM。 (2认同)

Luk*_*uke 27

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

npm install --global windows-build-tools

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

  • 对于那些可能像我一样有问题的人.我需要`--production`选项.`npm install --global --production windows-build-tools`根据node-gyp安装说明:https://github.com/nodejs/node-gyp (6认同)

Chr*_*ong 13

对于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
Run Code Online (Sandbox Code Playgroud)

如果使用Visual Studio 2019社区版本,

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Microsoft\VC\v160
Run Code Online (Sandbox Code Playgroud)

此处的其他答案将此变量设置为,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
Run Code Online (Sandbox Code Playgroud)

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

C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin
Run Code Online (Sandbox Code Playgroud)

  • 它也可能是“Microsoft Visual Studio\2019\BuildTools”或类似的变体 - 我想除了 BuildTools 和 Community,您还可以拥有 Professional 和 Enterprise。`vswhere.exe -products * -property InstallationPath` 将搜索所有组合,并返回所有已安装产品的位置。 (2认同)
  • “vswhere.exe”不被识别为内部或外部命令、可操作程序或批处理文件。 (2认同)

xve*_*ges 12

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

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

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


KMo*_*raz 6

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

MSBuildExtensionsPath = C:\Program Files (x86)\MSBuild
MSBuildExtensionsPath32 = C:\Program Files (x86)\MSBuild
MSBuildExtensionsPath64 = C:\Program Files\MSBuild
Run Code Online (Sandbox Code Playgroud)

如果没有,则表示您安装了某些自定义第三方覆盖目标,或者您的MSBuild安装已损坏.

要尝试的事情:

  • 修复.NET安装
  • 应用最新的Visual Studio Service Pack
  • MSBuildExtensionsPath手动设置如上(注意x8664位机器上的部件)

  • 谢谢,但仍然没有设置后:1)修复.net 4.5,2)卸载.net 4.5和修复4.0.如果我在环境中手动设置它们也不起作用 (2认同)

mme*_*314 5

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 环境变量。

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

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


Sjs*_*Sjs 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


Flo*_*ter 5

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

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

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

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

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

更多提示: