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

.NET Core 3.1升级.NET 6后启动抛出InvalidOperationException异常求助

解决.NET 6升级后"Can't compile a NewExpression with a constructor declared on an abstract class"异常

常见排查方向及修复方案

1. 适配AspNetCoreRateLimit版本

.NET 6对依赖注入逻辑有细节调整,旧版本的AspNetCoreRateLimit可能存在兼容性问题。请确保安装的是支持.NET 6的版本(至少v4.x及以上),通过NuGet包管理器更新该库即可。

2. 检查Startup.cs中的服务注册代码

异常核心是代码尝试实例化抽象类,大概率出现在限流服务的配置环节。需注意:

  • 禁止直接注册抽象类的构造函数,必须关联对应的具体实现类
  • 排查是否存在AddSingleton<AbstractType>()这类未指定实现的错误注册方式

以AspNetCoreRateLimit为例,正确的注册示例如下:

using AspNetCoreRateLimit;

public void ConfigureServices(IServiceCollection services)
{
    // 加载限流配置项
    services.Configure<IpRateLimitOptions>(Configuration.GetSection("IpRateLimiting"));
    services.Configure<IpRateLimitPolicies>(Configuration.GetSection("IpRateLimitPolicies"));
    
    // 注册限流所需的具体实现服务
    services.AddSingleton<IIpPolicyStore, MemoryCacheIpPolicyStore>();
    services.AddSingleton<IRateLimitCounterStore, MemoryCacheRateLimitCounterStore>();
    services.AddSingleton<IRateLimitConfiguration, RateLimitConfiguration>();
    services.AddSingleton<IProcessingStrategy, AsyncKeyLockProcessingStrategy>();
    
    // 其他Web API服务配置
    services.AddControllers();
}

3. 验证Program.cs的宿主构建逻辑

如果保留了Startup.cs的传统模式(未改用.NET 6顶级语句),需确保CreateHostBuilder的配置逻辑无错误注入:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
        });

若已切换为顶级语句模式,同样要检查DI注册环节是否存在抽象类实例化的问题。

4. 排查自定义服务与中间件

如果项目中有自定义的抽象类服务,检查是否存在services.AddScoped<IAbstractService>()这类缺失具体实现的注册,必须修正为services.AddScoped<IAbstractService, ConcreteService>()的形式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 07:45:49