VS2022 .NET6 Program.cs中Main方法位置及相关代码添加方法
.NET 6 Program.cs 相关问题说明
public static void Main(string[] args) 所在位置
你在默认生成的Program.cs里找不到显式编写的Main方法是正常的,.NET 6 及以上版本的项目模板默认启用顶级语句特性:
- 编译器会在项目编译阶段自动生成
Program类和作为程序入口的Main方法,不需要开发者手动编写这段结构 - 你直接写在Program.cs最外层的所有顶层代码,都会被编译器自动放入生成的
Main方法中按顺序执行
目标代码添加方法
不需要硬套旧版本的代码结构,新模板和旧写法的逻辑是完全对应的,按以下规则调整即可:
- 旧写法里的
var host = CreateHostBuilder(args).Build();在新模板里已经有等价实现:模板中先通过var builder = WebApplication.CreateBuilder(args);完成主机配置、服务注册后,var app = builder.Build();这行代码就完全对应旧写法里Build出host实例的逻辑,不需要重复编写。 - 你要添加的作用域创建代码
using (var scope=host.Services.CreateScope()),直接放在var app = builder.Build();之后、app.Run();之前即可,注意把代码里的host替换为新模板里的app实例。
调整后的代码参考片段
var builder = WebApplication.CreateBuilder(args); // 原有模板自动生成的服务注册代码,比如AddControllers、AddDbContext等 // builder.Services.AddControllersWithViews(); var app = builder.Build(); // 你需要添加的作用域逻辑放在这个位置 using (var scope = app.Services.CreateScope()) { var serviceProvider = scope.ServiceProvider; // 在这里写作用域内的执行逻辑,比如初始化种子数据、获取指定服务实例等 } // 原有模板自动生成的中间件配置代码 // if (!app.Environment.IsDevelopment()) // { // app.UseExceptionHandler("/Home/Error"); // } // app.UseStaticFiles(); // app.UseRouting(); // app.UseAuthorization(); // app.MapDefaultControllerRoute(); app.Run();
如果你更习惯旧版本显式声明
Program类和Main方法的写法,也可以直接把Program.cs里的所有代码包裹到public class Program { public static void Main(string[] args) { /* 你的代码 */ } }结构中,程序可以正常运行,没有兼容性问题。
内容的提问来源于stack exchange,提问作者Sola Akinwale
相关产品推荐
相关产品推荐

