如何在VS2022编译时屏蔽Windows Implementation Library警告
屏蔽VS2022中WIL库的编译警告
问题描述
使用VS2022编译项目时,出现大量来自Windows Implementation Library(WIL)的警告,这些警告并非源于自身源代码,且数量过多已导致IntelliSense频繁崩溃。
警告示例
Severity Code Description Project File Line Suppression State Details Warning C26432 If you define or delete any default operation in the type 'class wistd::unique_ptr<wchar_t [0],struct wil::function_deleter<void (__stdcall*)(void *),&void __stdcall CoTaskMemFree(void *)> >', define or delete them all (c.21). Meeting Schedule Assistant D:\My Programs\2022\MeetSchedAssist\packages\Microsoft.Windows.ImplementationLibrary.1.0.231216.1\include\wil\wistd_memory.h 783 Warning C26432 If you define or delete any default operation in the type 'class wistd::unique_ptr<wchar_t [0],struct wil::cotaskmem_secure_deleter>', define or delete them all (c.21). Meeting Schedule Assistant D:\My Programs\2022\MeetSchedAssist\packages\Microsoft.Windows.ImplementationLibrary.1.0.231216.1\include\wil\wistd_memory.h 783 Warning C26447 The function is declared 'noexcept' but calls function 'operator()<void>()' which may throw exceptions (f.6). Meeting Schedule Assistant D:\My Programs\2022\MeetSchedAssist\packages\Microsoft.Windows.ImplementationLibrary.1.0.231216.1\include\wil\wistd_memory.h 576 Warning C26432 If you define or delete any default operation in the type 'class wistd::unique_ptr<void,struct wil::process_heap_deleter>', define or delete them all (c.21). Meeting Schedule Assistant D:\My Programs\2022\MeetSchedAssist\packages\Microsoft.Windows.ImplementationLibrary.1.0.231216.1\include\wil\wistd_memory.h 524 Warning C26432 If you define or delete any default operation in the type 'class wistd::unique_ptr<struct wil::details::event_watcher_state,struct wistd::default_delete<struct wil::details::event_watcher_state> >', define or delete them all (c.21). Meeting Schedule Assistant D:\My Programs\2022\MeetSchedAssist\packages\Microsoft.Windows.ImplementationLibrary.1.0.231216.1\include\wil\wistd_memory.h 524 Warning C26477 Use 'nullptr' rather than 0 or NULL (es.47). Meeting Schedule Assistant D:\My Programs\2022\MeetSchedAssist\packages\Microsoft.Windows.ImplementationLibrary.1.0.231216.1\include\wil\wistd_functional.h 391 Warning C26477 Use 'nullptr' rather than 0 or NULL (es.47). Meeting Schedule Assistant D:\My Programs\2022\MeetSchedAssist\packages\Microsoft.Windows.ImplementationLibrary.1.0.231216.1\include\wil\wistd_functional.h 385 Warning C26440 Function 'wistd::function<void __cdecl(void)>::__as_base' can be declared 'noexcept' (f.6). Meeting Schedule Assistant D:\My Programs\2022\MeetSchedAssist\packages\Microsoft.Windows.ImplementationLibrary.1.0.231216.1\include\wil\wistd_functional.h 294 Warning C26432 If you define or delete any default operation in the type 'class wistd::__function::__base<void __cdecl(void)>', define or delete them all (c.21). Meeting Schedule Assistant D:\My Programs\2022\MeetSchedAssist\packages\Microsoft.Windows.ImplementationLibrary.1.0.231216.1\include\wil\wistd_functional.h 216 Warning C26440 Function 'wistd::__throw_bad_function_call' can be declared 'noexcept' (f.6). Meeting Schedule Assistant D:\My Programs\2022\MeetSchedAssist\packages\Microsoft.Windows.ImplementationLibrary.1.0.231216.1\include\wil\wistd_functional.h 141 Warning C26440 Function 'wil::err_exception_policy::OK' can be declared 'noexcept' (f.6). Meeting Schedule Assistant D:\My Programs\2022\MeetSchedAssist\packages\Microsoft.Windows.ImplementationLibrary.1.0.231216.1\include\wil\result_macros.h 7257 Warning C26429 Symbol 'ph' is never tested for nullness, it can be marked as not_null (f.23). Meeting Schedule Assistant D:\My Programs\2022\MeetSchedAssist\packages\Microsoft.Windows.ImplementationLibrary.1.0.231216.1\include\wil\result_macros.h 7236
解决方案
方法1:精准禁用特定警告
- 全局项目设置:
- 右键项目 → 打开属性
- 进入
配置属性 → C/C++ → 高级 - 在
禁用特定警告栏中添加需要屏蔽的警告码,用分号分隔:C26432;C26447;C26477;C26440;C26429
- 局部头文件包裹:
若不想全局禁用,可在包含WIL头文件前后用编译指令临时屏蔽警告:#pragma warning(push) #pragma warning(disable: C26432 C26447 C26477 C26440 C26429) #include <wil/wistd_memory.h> #include <wil/wistd_functional.h> // 其他WIL头文件 #pragma warning(pop)
方法2:更新WIL库到最新版本
WIL开发团队会持续修复库内的代码分析警告问题,通过NuGet包管理器将Microsoft.Windows.ImplementationLibrary更新至最新版本,多数情况下能消除这类内置警告。
方法3:调整代码分析范围
- 打开项目属性 →
配置属性 → 代码分析 → 常规 - 选择
代码分析模式为仅运行内置检查,或降低分析级别;若VS版本支持,勾选排除第三方代码选项,避免对WIL这类外部库执行深度分析。
内容的提问来源于stack exchange,提问作者Andrew Truckle
相关产品推荐
相关产品推荐

