.NET 6의 Program.cs와 .NET 5의 Startup.cs 파일을 비교합니다.

 

.NET 6, 7, 8 이후로는

기존 .NET 버전에서의 Startup.cs 파일이 생성되지 않습니다.

대신에 Program.cs 파일에 Startup.cs 파일의 기능을 적용합니다.

 

예제 코드는 다음 경로에 있습니다.

https://github.com/VisualAcademy/DotNetSix

 

ASP.NET Core Web Application을 생성하는 예시입니다. 

2022-06-17_08-19-45.png

프로젝트 생성 과정에서 .NET 6.0과 계별 계정을 선택하는 모양입니다. 

2022-06-17_08-19-45.png

.NET 5 SDK가 설치되어 있는 상태에서 ASP.NET Core Razor Pages 프로젝트 생성하는 모양입니다. 

2022-06-17_08-19-45.png

마지막으로 .NET 6를 사용하되, Top-Level Statements를 사용하지 않고 Main 메서드를 사용하는 모양입니다.

2022-06-17_08-19-45.png

 

 

.NET 6에서 Top-Level Statement를 사용하여 프로젝트를 생성하면 Program.cs 파일 하나만 만들어지고, 주석을 제외한 코드는 다음과 같습니다. 

이 코드에 의존성 주입 관련된 코드 및 기타 코드들이 들어옵니다. 

<코드> .NET 6의 Program.cs 파일 기본 코드

using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using WebApplication6.Data;

var builder = WebApplication.CreateBuilder(args);

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(connectionString));
builder.Services.AddDatabaseDeveloperPageExceptionFilter();

builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
    .AddEntityFrameworkStores<ApplicationDbContext>();
builder.Services.AddRazorPages();

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
    app.UseMigrationsEndPoint();
}
else
{
    app.UseExceptionHandler("/Error");
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseAuthentication();
app.UseAuthorization();

app.MapRazorPages();

app.Run();

</코드>

 

.NET 1.0부터 .NET 5까지의 프로젝트 템플릿은 Program.cs와 Startup.cs 파일로 분리되어 프로젝트가 생성됩니다. 

<코드> .NET 5의 Startup.cs 파일 기본 코드

using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using WebApplication5.Data;

namespace WebApplication5
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public IConfiguration Configuration { get; }

        public void ConfigureServices(IServiceCollection services)
        {
            services.AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlServer(
                    Configuration.GetConnectionString("DefaultConnection")));
            services.AddDatabaseDeveloperPageExceptionFilter();
            services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
                .AddEntityFrameworkStores<ApplicationDbContext>();
            services.AddRazorPages();
        }

        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
                app.UseMigrationsEndPoint();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthentication();
            app.UseAuthorization();

            app.UseEndpoints(endpoints =>
            {
                endpoints.MapRazorPages();
            });
        }
    }
}

</코드>

 

 

.NET 6에서 Top-Level Statements를 사용하지 않고 Main 메서드를 포함하여 생성된 Program.cs 파일의 모양입니다.

<코드>.NET 6의 Program.cs 파일에 Main 메서드 사용

using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using WebApplicationWithMain.Data;

namespace WebApplicationWithMain
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);

            var connectionString = builder.Configuration.GetConnectionString("DefaultConnection") ?? throw new InvalidOperationException("Connection string 'DefaultConnection' not found.");
            builder.Services.AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlServer(connectionString));
            builder.Services.AddDatabaseDeveloperPageExceptionFilter();

            builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
                .AddEntityFrameworkStores<ApplicationDbContext>();
            builder.Services.AddRazorPages();

            var app = builder.Build();

            if (app.Environment.IsDevelopment())
            {
                app.UseMigrationsEndPoint();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthentication();
            app.UseAuthorization();

            app.MapRazorPages();

            app.Run();
        }
    }
}

</코드>

 

 

.NET 6가 아닌 .NET 5와 같이 이전 버전의 소스와 강좌 그리고 책의 내용을 참고할 때에는 다음 2가지 사항을 주의하면 됩니다.

다음 코드의 [1]번 주석과 [2]번 주석을 참고하세요.

<코드>

using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using WebApplicationWithMain.Data;

namespace WebApplicationWithMain
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);

            //[1] Startup.cs 파일의 ConfigureServices 메서드의 코드는 이곳에 작성
            // services.AddXXX() 형태는 builder.Services.AddXXX() 형태로 변경해서 작성
            var connectionString = builder.Configuration.GetConnectionString("DefaultConnection") ?? throw new InvalidOperationException("Connection string 'DefaultConnection' not found.");
            builder.Services.AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlServer(connectionString));
            builder.Services.AddDatabaseDeveloperPageExceptionFilter();

            builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
                .AddEntityFrameworkStores<ApplicationDbContext>();
            builder.Services.AddRazorPages();

            var app = builder.Build();

            //[2] Startup.cs 파일의 Configure 메서드의 코드는 이곳에 작성 
            // app.UseXXX() 형태의 코드를 그대로 사용 가능 
            if (app.Environment.IsDevelopment())
            {
                app.UseMigrationsEndPoint();
            }
            else
            {
                app.UseExceptionHandler("/Error");
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthentication();
            app.UseAuthorization();

            app.MapRazorPages();

            app.Run();
        }
    }
}

</코드>

 

 

감사합니다.

 

 

 

 

 

 

 

Comments


Comments are closed