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

.NET 6 API触发System.InvalidProgramException异常求排查方案

解决System.InvalidProgramException:CLR检测到无效程序的排查方案
  • 排查服务生命周期冲突
    异常触发于服务解析环节,且存在“2次正常请求后报错”的规律,优先检查单例服务是否依赖了瞬态/范围服务。单例服务会长期持有依赖实例,而范围服务在请求结束后会被回收,后续请求使用时会出现无效状态,进而引发CLR检测到无效程序的异常。逐一核对单例注册服务的构造函数注入项,确认依赖服务的生命周期是否匹配。

  • 修正中间件服务注入方式
    中间件默认是单例生命周期,若在构造函数中直接注入范围服务,会导致生命周期不兼容。正确做法是在Invoke方法内通过context.RequestServices.GetRequiredService<T>()获取范围服务,而非构造函数注入。

  • 核查依赖版本一致性
    尽管已更新NuGet包,仍可能存在间接依赖版本冲突。执行以下命令查看完整依赖树:

    dotnet list package --include-transitive
    

    重点确认Microsoft.Extensions.DependencyInjection及关联依赖(如Microsoft.Extensions.DependencyInjection.Abstractions)在所有项目中版本统一,排除版本不兼容导致的IL代码生成异常。

  • 清理编译与构建缓存
    编译生成的中间文件损坏可能导致CLR加载无效程序集:

    • 删除所有项目的bin、obj目录
    • 执行dotnet clean和dotnet restore重新编译项目
    • Docker环境下,添加--no-cache参数重新构建镜像,清除构建缓存
  • 排查服务注册逻辑
    若服务注册使用了动态代码生成(如表达式树、Emit)或自定义DI扩展,可能存在代码生成错误导致IL无效。暂时简化服务注册逻辑,逐步添加服务,定位引发异常的注册项。

  • 启用CLR详细日志
    在Program.cs中添加配置获取更详细的异常上下文:

    // 启用DI调试日志
    builder.Logging.AddFilter("Microsoft.Extensions.DependencyInjection", LogLevel.Debug);
    

    或在appsettings.json中调整日志级别:

    {
      "Logging": {
        "LogLevel": {
          "Microsoft.Extensions.DependencyInjection": "Debug",
          "System": "Debug"
        }
      }
    }
    

内容的提问来源于stack exchange,提问作者Swirlas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 21:38:26