VS2022中ASP.NET Core MVC项目Program.cs编译错误CS1022求助
ASP.NET Core MVC编译错误CS1022解决方法
问题情况
在VS2022中创建ASP.NET Core MVC应用时,编译Program.cs出现CS1022错误(提示“Type or namespace definition, or end-of-file expected”),但文件内无红色错误标记;运行应用也出现启动失败错误。
编译错误截图:显示CS1022编译错误,提示需类型、命名空间定义或文件结束
运行错误截图:显示应用启动失败相关报错
原Program.cs代码
using Fluent.Infrastructure.FluentModel; using System.Net; using Microsoft.EntityFrameworkCore; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllersWithViews(); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run(); //var builder = WebApplication.CreateBuilder(args); var connectionString = builder.Configuration.GetConnectionString("DefaultConnection"); builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(connectionString));
错误原因
代码顺序完全错误:
app.Run()是应用启动语句,执行后程序进入运行状态,后续代码根本不会执行- 在ASP.NET Core的顶级语句结构中,
app.Run()之后的代码属于无效语法,编译器无法识别,直接抛出CS1022错误 - 数据库上下文的注册(
AddDbContext)必须在生成应用实例之前完成,也就是var app = builder.Build();之前,因为builder.Build()会根据已注册的服务创建应用,之后再修改服务容器毫无意义
修复后的代码
using Fluent.Infrastructure.FluentModel; using System.Net; using Microsoft.EntityFrameworkCore; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllersWithViews(); // 把数据库上下文注册移到服务配置阶段 var connectionString = builder.Configuration.GetConnectionString("DefaultConnection"); builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseSqlServer(connectionString)); var app = builder.Build(); // Configure the HTTP request pipeline. if (!app.Environment.IsDevelopment()) { app.UseExceptionHandler("/Home/Error"); // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts. app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseRouting(); app.UseAuthorization(); app.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); app.Run();
额外检查项
- 确认
appsettings.json里配置了正确的DefaultConnection连接字符串 - 确认
ApplicationDbContext类正确继承自DbContext
内容的提问来源于stack exchange,提问作者Guru
相关产品推荐
相关产品推荐

