Visual Studio使用/std:c++20且禁用/ZW时无法构建UWP应用问题排查
问题根因说明
这不是你的配置问题,也不属于IDE BUG,是Visual Studio 2019本身的设计限制导致的:
- 你提到的关闭
/ZQ属于笔误,实际控制Windows运行时扩展的参数是/ZW,VS2019版本的MSVC编译器明确不支持/ZW(C++/CX编译选项)与/std:c++20参数同时启用,因此会抛出D8016错误,该限制是官方预设的。 - 你关闭
/ZW后出现WMC1007报错的原因是:你创建的是UWP类型项目,项目构建流程默认依赖WinRT元数据解析能力,/ZW参数负责提供该能力,关闭后构建流程无法读取Windows.metadata文件,和你是否安装Windows SDK无关。
可行解决方案
有两个可选方案解决该问题:
- 升级到Visual Studio 2022,该版本的MSVC编译器已经支持
/ZW参数与/std:c++20同时启用,直接打开原有项目即可正常构建。 - 保留VS2019的前提下,将项目的C++/CX实现替换为C++/WinRT实现:C++/WinRT是纯标准C的WinRT绑定方案,不需要启用
/ZW参数,天然兼容C20标准。
另外你贴出的编译命令中同时存在/std:c17和/std:c++20参数是正常的,前者对应C语言标准,后者对应C++语言标准,二者不冲突,也不是导致报错的原因。
内容的提问来源于stack exchange,提问作者alexmro
相关产品推荐
相关产品推荐

