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

.NET5项目升级后启动报错:Microsoft.AspNetCore.Hosting.Server.IServer服务验证异常

异常说明

抛出的异常如下:

InvalidOperationException: 验证服务描述符'ServiceType: Microsoft.AspNetCore.Hosting.Server.IServer Lifetime: Singleton ImplementationType: Microsoft.AspNetCore.Server.Kestrel.Core.KestrelServerImpl'时出错:无法比较数组中的两个元素。

堆栈信息:

Microsoft.Extensions.DependencyInjection.ServiceProvider.ValidateService(ServiceDescriptor descriptor)
Microsoft.Extensions.DependencyInjection.ServiceProvider..ctor(IEnumerable<ServiceDescriptor> serviceDescriptors, ServiceProviderOptions options)
排查方向
  • 检查所有Microsoft.AspNetCore.*、Microsoft.Extensions.*系列NuGet包的版本一致性,确保所有包都统一使用.NET 5对应的5.0.x版本,不存在3.x、2.x版本混用的情况
  • 检查Program.cs中Kestrel服务的配置代码,旧版本的UseKestrel重载、不被.NET 5支持的配置项都会引发服务构建失败
  • 检查ConfigureServices中是否存在手动注册IServer、KestrelServerImpl相关服务的代码,.NET 5的Web主机构建逻辑会自动注册Kestrel服务,重复注册不同生命周期的实现会触发验证冲突
  • 确认是否开启了服务构建验证配置ValidateOnBuild = true,该配置会在容器构建时严格校验所有服务的合法性,只要存在一个不合法的服务注册就会直接抛出异常
解决方案
  1. 统一NuGet包版本
    右键解决方案选择「管理解决方案的NuGet包」,在「更新」和「已安装」标签页中合并所有Microsoft.AspNetCore、Microsoft.Extensions开头的包版本到最新的5.0.x稳定版,删除所有版本不一致的冗余包引用。

  2. 修正Kestrel配置写法
    替换旧版本的Kestrel配置为.NET 5兼容的写法,示例如下:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseKestrel(serverOpts =>
            {
                // 仅保留.NET 5支持的配置项
                serverOpts.ListenAnyIP(5000);
                serverOpts.Limits.MaxRequestBodySize = 10 * 1024 * 1024;
            });
            webBuilder.UseStartup<Startup>();
        });
  1. 删除重复的服务注册
    检查Startup.cs的ConfigureServices方法,删除所有手动注册IServer、KestrelServerImpl的代码,避免和系统自动注册的服务冲突。

  2. 临时关闭服务验证排查问题
    如果暂时无法定位冲突点,可以先关闭服务构建验证确认是否是校验逻辑导致的问题:

Host.CreateDefaultBuilder(args)
    .UseDefaultServiceProvider(opts =>
    {
        opts.ValidateOnBuild = false;
        opts.ValidateScopes = false;
    })
    .ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder.UseStartup<Startup>();
    });

该配置仅用于排查问题,生产环境建议开启验证以提前发现服务注册风险。

内容的提问来源于stack exchange,提问作者Israel Herrera Payano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 16:15:02