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

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

尝试修复的问题:

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

看起来 MSBuildExtensionsPath32 没有被正确设置,而设置 MSBuildExtensionsPath 也没有帮助

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

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


7
好的!这是又一个问题,由于 Visual Studio 安装文件损坏而导致错误,有数百种解决方法,但每一种只适用于特定的情况... - Florian Winter
23个回答

2

除了将路径设置为以下内容,没有其他方法适用于我:

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

1
我应该设置哪个路径? - Nageshwar Reddy Pandem

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

2
在我的情况下,我添加了一个名为VCTargetPath的环境变量,路径为:

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

(末尾的'\'非常关键,因为项目解决方案文件引用了“Microsoft cpp targets”文件。)
另外,从Visual Studio 2017开始,MSBUILD与Visual Studio一起发布 - 因此,需要更新PATH变量,路径为:

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

更新VCTargetPath和MSBUILD的PATH变量并重新构建即可修复错误。

1

不要设置固定路径,首先在您的后构建命令行中尝试这个:

SET VCTargetsPath=$(VCTargetsPath)

变量“$(VCTargetsPath)”似乎是与C++相关的Visual Studio宏,但在C# SDK项目中未显示为宏,但在该项目中仍然可用。

0
记录一下,文件Microsoft.Cpp.Default.props可以修改环境变量VCTargetsPath,并使后续使用该变量的操作不正确。 我曾经遇到过这个问题,并通过将VCTargetsPath10VCTargetsPath11设置为与VCTargetsPath相同的值来解决它。
根据您使用的VS版本进行适当调整。

0

关于Chris Gong在上面提到的VS2017/2019的回答(我还没有评论权限),我想补充一点。

如果安装的是VS 2019 Build Tools而不是完整的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,因此我在注册表中的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0下创建了VCTragetsPath字符串,并将其值设置为C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\IDE\VC\VCTargets

  • 我还将我的Jenkins运行为管理员用户

这解决了我的问题。


0
在我的情况下,由于我安装了多个编译器,我使用了错误版本的MSBuild。我通过在命令中使用完整路径(Visual Studio 2022)来解决了这个问题。
"C:\Program Files\Microsoft Visual Studio\2022\Community\Msbuild\Current\Bin\MSBuild.exe" "C:\path-to-project\myproject.vcxproj"

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

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接