如何修复Asp.Net Core项目开启非空引用后出现的所有非空警告
Asp.Net Core 启用可空引用检查后添加Identity出现大量警告的修复方案
- 方法1:批量禁用Identity相关目录的可空检查
如果你是通过Identity脚手架自动生成了Razor页面、服务类等代码,直接在Identity代码的根目录(一般是Areas/Identity/)下新建Directory.Build.props文件,填入以下内容即可让该目录下所有文件自动关闭可空检查,无需修改单个文件:<Project> <PropertyGroup> <Nullable>disable</Nullable> </PropertyGroup> </Project> - 方法2:使用null包容运算符抑制调用侧警告
如果是你自己编写的业务代码调用Identity API时触发的可空警告,不需要修改逻辑,只需要在确定不可能为null的返回值后添加!运算符即可,示例:
这种方式只会抑制对应位置的警告,不会影响全局可空检查的有效性。// 调用Identity API时添加!抑制警告 var currentUser = await _userManager.GetUserAsync(User)!; var signInResult = await _signInManager.PasswordSignInAsync(userName, password, false, false)!; - 方法3:自定义Identity实体类时显式初始化非空属性
如果你自定义了继承自Identity基类的实体(如AppUser、AppRole等),可以通过给继承的属性设置默认值default!或者加required关键字批量抑制属性的可空警告:public class AppUser : IdentityUser { // 所有重写的属性统一设置default!即可抑制警告 public override string UserName { get; set; } = default!; public override string Email { get; set; } = default!; // 自定义的属性按照正常的可空规则声明即可 public string? CustomAvatarUrl { get; set; } } - 方法4:全局抑制指定可空警告编号(不推荐优先使用)
如果以上方法都不适用,可以在项目的.csproj文件中添加可空警告的编号到NoWarn列表,批量关闭全项目的对应警告:
注意该方法会关闭全项目的对应可空警告,可能会漏掉你自己业务代码中的可空问题,仅作为临时方案使用。<PropertyGroup> <NoWarn>$(NoWarn);CS8600;CS8601;CS8602;CS8603;CS8604;CS8618</NoWarn> </PropertyGroup>
内容的提问来源于stack exchange,提问作者Kostya Kruk
相关产品推荐
相关产品推荐

