.NET Core项目:选Startup.cs还是Program.cs?ASP.NET Core 6相关技术疑问
.NET Core Startup.cs vs Program.cs 常见问题解答
1. 在.NET Core项目中,创建Startup.cs文件而非在Program.cs中注册服务是否更合适?
没有绝对的“更合适”,完全看项目规模和团队习惯:
- 要是大型企业级项目,用Startup.cs能把服务注册(
ConfigureServices)和中间件配置(Configure)拆分,代码结构更清晰,多人协作维护时不会让Program.cs变得臃肿不堪。 - 要是小型项目、Minimal API或者快速原型,直接在Program.cs里搞定服务注册和中间件配置更简洁,少一个文件的维护成本,代码流程也更紧凑。
两种方式功能完全等价,官方都支持,按实际场景选就行。
2. 为何较新版本的.NET Core移除了Startup.cs文件,是否存在特定原因?
.NET 6及以后默认模板拿掉Startup.cs,核心是为了简化开发体验、降低入门门槛:
- 引入了顶级语句(Top-level statements),能删掉Program类、Main方法这类样板代码,启动代码变得极简,新手不用纠结复杂的类和方法结构就能快速上手。
- 原来Startup.cs里的
ConfigureServices和Configure逻辑,完全可以通过WebApplicationBuilder在Program.cs里实现,功能一点没少,只是语法更直白。 - 官方没强制禁用Startup.cs,你完全可以像示例代码那样手动创建Startup.cs,再用
UseStartup<Startup>()指定,兼容旧的开发习惯。
3. 将服务与中间件注册集成到Program.cs文件中,是否是最新版.NET Core中配置应用的推荐且更直观的方式?
是的,这是官方推荐的默认方式,尤其适合Minimal API和中小型项目:
- 顶级语句带来的线性代码结构,从创建WebApplicationBuilder,到注册服务、配置中间件、启动应用,整个流程一气呵成,读代码和调试都更直观。
- 少了不必要的文件和类层级,降低了项目复杂度。
- 当然,如果项目规模超大,觉得Program.cs内容太多,还是可以拆分到Startup.cs或者单独的配置类里,官方支持两种方式并存,不会限制你的选择。
代码示例(兼容Startup.cs的写法)
public class Program { public static async Task Main(string[] args) { var host = CreateHostBuilder(args).UseDefaultServiceProvider(x => x.ValidateScopes = false).Build(); await host.RunAsync(); } public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); }); }
内容的提问来源于stack exchange,提问作者Muteeb ali
相关产品推荐
相关产品推荐

