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

.NET5升级.NET6无Startup.cs时IConfiguration配置实现方法

核心原因

.NET 6 起默认采用最小托管模型,不再强制要求使用Startup.cs拆分配置逻辑,原Startup类承担的服务注册、中间件管道配置职责,全部可以直接在Program.cs通过顶级语句实现。
现有代码无法正常运行的错误点:

  • 服务注册位置错误:AddDbContext属于服务注入配置,必须在var app = builder.Build()调用前执行。Build()方法执行完成后会生成只读的服务提供器,后续无法再注册新服务,运行时会直接抛出InvalidOperationException。
  • 冗余配置取值:服务注册阶段直接通过builder.Configuration就能读取配置,不需要等应用构建完成后从app.Configuration取值,也不需要额外声明全局变量存储配置实例。
修正后的可直接运行代码
using API.Data;
using Microsoft.EntityFrameworkCore;

var builder = WebApplication.CreateBuilder(args);

// 所有服务注册逻辑统一放在Build()调用前
builder.Services.AddControllers();
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

// 直接读取builder.Configuration中的连接字符串注册DbContext
builder.Services.AddDbContext<DataContext>(options =>
{
    options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection"));
});

var app = builder.Build();

// 所有中间件管道配置逻辑统一放在Build()调用后
if (app.Environment.IsDevelopment())
{
    app.UseSwagger();
    app.UseSwaggerUI();
}

app.UseHttpsRedirection();
app.UseAuthorization();
app.MapControllers();

app.Run();
可选:兼容原有Startup类的写法

如果是老项目迁移,想保留原Startup类的结构减少改动量,也可以手动添加Startup类,在Program.cs中手动调用对应方法即可,不需要依赖框架自动注入。

  1. 手动创建Startup.cs写入原有逻辑
public class Startup
{
    private readonly IConfiguration _config;
    public Startup(IConfiguration config)
    {
        _config = config;
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddControllers();
        services.AddEndpointsApiExplorer();
        services.AddSwaggerGen();
        services.AddDbContext<DataContext>(options =>
        {
            options.UseSqlServer(_config.GetConnectionString("DefaultConnection"));
        });
    }

    public void Configure(WebApplication app)
    {
        if (app.Environment.IsDevelopment())
        {
            app.UseSwagger();
            app.UseSwaggerUI();
        }
        app.UseHttpsRedirection();
        app.UseAuthorization();
        app.MapControllers();
    }
}
  1. 简化Program.cs逻辑调用Startup
var builder = WebApplication.CreateBuilder(args);
var startup = new Startup(builder.Configuration);
startup.ConfigureServices(builder.Services);

var app = builder.Build();
startup.Configure(app);
app.Run();

注意:该兼容写法仅适合老项目快速迁移适配,新项目直接使用最小托管模型写法更简洁,也是官方推荐的默认方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 19:45:31