使用Oakton检查.NET5 Core应用Lamar配置出现空引用如何排查
问题修复方案
1. 修复Oakton诊断命令不生效问题
当前使用的包版本存在不兼容问题:Lamar 5.x版本要求配套使用Lamar.Diagnostics 5.x版本,你安装的Lamar.Diagnostics 3.0.2仅适配Lamar 4.x版本,所以无法被Oakton正确识别。
修复步骤:
- 卸载当前的Lamar.Diagnostics 3.0.2包
- 安装与Lamar版本匹配的Lamar.Diagnostics 5.0.3包
- 在Program.cs的CreateHostBuilder末尾添加
.UseOakton()扩展方法,完成Oakton命令的注册,示例如下:
public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .UseLamar((HostBuilderContext, registry) => { registry.CheckLamarConfiguration(); }) .ConfigureWebHostDefaults(webBuilder => { // 原有配置保持不变 }) .UseOakton(); // 新增这行
- 调整Main方法,使用Oakton来运行宿主:
public static int Main(string[] args) { return CreateHostBuilder(args).RunOaktonCommands(args); }
完成后重新运行dotnet run -- lamar-services即可正常输出Lamar服务注册信息。
2. 修复ValidationBehavior未被调用问题
从提供的代码和包列表看,仅安装了FluentValidation相关包,没有完成验证器和MediatR管道行为的注册,是导致ValidationBehavior不触发的核心原因。
修复步骤:
- 在ConfigureServices方法中注册FluentValidation验证器,扫描项目中所有继承了AbstractValidator的验证类:
services.AddValidatorsFromAssemblyContaining<你项目中任意一个验证器的类型>();
- 注册MediatR的ValidationBehavior管道行为,确保它会在请求处理前执行验证:
services.AddTransient(typeof(IPipelineBehavior<,>), typeof(ValidationBehavior<,>));
- 注意要确保ValidationBehavior的注册在MediatR注册之后,保证管道顺序正确。
内容的提问来源于stack exchange,提问作者phitch
相关产品推荐
相关产品推荐

