You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 16:54:03