使用Directory.build.targets设置v143工具集报MSB8020错误的原因排查
解决VS2022通过Directory.build.targets统一设置PlatformToolset失败的问题
核心问题:导入时机错误
Directory.build.targets是在项目构建的后期阶段才被导入的,而<PlatformToolset>的配置需要在项目属性初始化的早期阶段生效。当你把工具集配置放在Directory.build.targets里时,系统已经完成了工具集的选择逻辑,你的v143设置根本没被读取,自然会报错找不到对应工具集。而手动修改项目文件时,配置是在正确的阶段被读取的,所以能正常构建。
正确配置方法
把工具集配置放到Directory.build.props文件中(注意是.props不是.targets),这个文件会在项目属性初始化的早期被导入,能覆盖默认的工具集设置:
- 在解决方案根目录创建
Directory.build.props文件 - 写入如下内容:
<Project> <PropertyGroup> <PlatformToolset>v143</PlatformToolset> </PropertyGroup> </Project>
额外排查事项
如果上述方法仍未解决问题,可以检查以下几点:
- 清理项目中的硬编码配置:部分项目可能在自身的
.vcxproj文件中硬写了<PlatformToolset>,这会覆盖根目录Directory.build.props的设置,需要删除这些局部配置。 - 排除IDE缓存问题:打开VS2022的Developer Command Prompt,切换到解决方案目录,运行
msbuild /t:Rebuild命令,看是否能正常构建,避免IDE缓存导致的异常。 - 确认工具集安装完整:打开Visual Studio安装器,检查“Desktop development with C++”工作负载下的MSVC v143 - VS 2022 C++ x64/x86 build tools是否已勾选并安装完成,部分情况下可能漏装了对应平台的工具集组件。
内容的提问来源于stack exchange,提问作者Kaustubh Dwivedi
相关产品推荐
相关产品推荐

