ASP.NET Core 3.1에서 6.0으로 마이그레이션
이 문서에서는 기존 ASP.NET Core 3.1 프로젝트를 ASP.NET Core 6.0으로 업데이트하는 방법을 설명합니다. ASP.NET Core 5.0에서 6.0으로 업그레이드하려면 ASP.NET Core 5.0에서 6.0으로 마이그레이션을 참조하세요.
사전 요구 사항
- ASP.NET 및 웹 개발 워크로드가 설치된 Visual Studio 2022입니다.
에서 .NET SDK 버전 업데이트 global.json
global.json 파일을 사용하여 특정 .NET SDK 버전을 대상으로 지정하는 경우 version 속성을 설치된 .NET 6.0 SDK 버전으로 업데이트합니다. 예를 들어:
{
"sdk": {
- "version": "3.1.200"
+ "version": "6.0.100"
}
}
대상 프레임워크 업데이트
프로젝트 파일의 TFM(대상 프레임워크 모니커)을 net6.0으로 업데이트합니다.
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net6.0</TargetFramework>
</PropertyGroup>
</Project>
패키지 참조 업데이트
프로젝트 파일에서 각 Microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*Microsoft.Extensions.*및 System.Net.Http.Json 패키지 참조의 Version 특성을 6.0.0 이상으로 업데이트합니다. 예를 들어:
<ItemGroup>
- <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="3.1.6" />
- <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.6" />
- <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="3.1.6" />
- <PackageReference Include="System.Net.Http.Json" Version="3.2.1" />
+ <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="6.0.0" />
+ <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.0" />
+ <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="6.0.0" />
+ <PackageReference Include="System.Net.Http.Json" Version="6.0.0" />
</ItemGroup>
bin 및 obj 폴더 삭제
bin 및 obj 폴더를 삭제해야 할 수 있습니다. NuGet 패키지 캐시를 지우려면 dotnet nuget locals --clear all을 실행합니다.
최소 호스팅 모델
ASP.NET Core 템플릿은 새 최소 호스팅 모델을 사용하여 코드를 생성합니다. 최소 호스팅 모델은 단일 Program.cs 파일로 통합됩니다.Startup.csProgram.cs ConfigureServices 더 Configure 이상 사용되지 않습니다. ASP.NET Core 3.1에서 6.0으로 마이그레이션하는 앱은 최소 호스팅 모델을 사용할 필요가 없으며 ASP.NET Core Startup 3.1 템플릿에서 사용되는 일반 호스트는 완전히 지원됩니다.
새 최소 호스팅 모델과 함께 사용 Startup 하려면 새 최소 호스팅 모델에서 시작 사용을 참조하세요.
ASP.NET Core 6.0 템플릿에서 사용하는 다음 패턴을 사용하여 새 최소 호스팅 모델로 마이그레이션하려면 ASP.NET Core 6.0의 새 최소 호스팅 모델로 마이그레이션된 코드 샘플 및 ASP.NET Core 5.0에서 6.0으로 마이그레이션을 참조하세요.
RCL(Razor 클래스 라이브러리) 업데이트
클래스 라이브러리(RCL)를 마이그레이션 Razor 하여 ASP.NET Core 6.0의 일부로 도입된 새로운 API 또는 기능을 활용합니다.
구성 요소를 대상으로 하는 RCL을 업데이트하려면 다음을 수행합니다.
프로젝트 파일에서 다음 속성을 업데이트합니다.
<Project Sdk="Microsoft.NET.Sdk.Razor"> <PropertyGroup> - <TargetFramework>netstandard2.0</TargetFramework> - <RazorLangVersion>3.0</RazorLangVersion> + <TargetFramework>net6.0</TargetFramework> </PropertyGroup>다른 패키지를 최신 버전으로 업데이트합니다. 최신 버전은 NuGet.org에서 찾을 수 있습니다.
MVC를 대상으로 하는 RCL을 업데이트하려면 프로젝트 파일에서 다음 속성을 업데이트합니다.
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
- <TargetFramework>netcoreapp3.1</TargetFramework>
+ <TargetFramework>net6.0</TargetFramework>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
</PropertyGroup>
Blazor
앱에 5.0 기능 및 6.0 기능을Blazor 모두 채택하려면 다음 프로세스를 사용하는 것이 좋습니다.
- Blazor 프로젝트 템플릿 중 하나에서 새 6.0 Blazor 프로젝트를 만듭니다. 자세한 내용은 ASP.NET Core Blazor 도구를 참조하세요.
- 앱의 구성 요소 및 코드를 6.0 앱으로 이동하여 새로운 5.0 및 6.0 기능을 채택하도록 수정합니다.
Docker 이미지 업데이트
Docker를 사용하는 앱의 경우 DockerfileFROM 문 및 스크립트를 업데이트합니다. ASP.NET Core 6.0 런타임을 포함하는 기본 이미지를 사용합니다. ASP.NET Core 3.1과 6.0 간의 다음 docker pull 명령 차이를 고려합니다.
- docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1
+ docker pull mcr.microsoft.com/dotnet/aspnet:6.0
제품 이름에서 “.NET”으로 이동하는 과정의 일환으로 Docker 이미지는 mcr.microsoft.com/dotnet/core 리포지토리에서 mcr.microsoft.com/dotnet으로 이동되었습니다. 자세한 내용은 .NET 5.0 - Docker 리포지토리 이름 변경(dotnet/dotnet-docker #1939)을 참조하세요.
ASP.NET Core MVC 및 Razor Pages의 모델 바인딩 변경 내용
DateTime 값은 UTC 시간으로 바인딩된 모델입니다.
ASP.NET Core 3.1 이전에서 DateTime 값은 현지 시간으로 모델 바인딩되었으며, 여기서 시간대는 서버에 의해 결정되었습니다. DateTime 값은 ON(JS입력 서식)에서 바인딩되고 DateTimeOffset 값은 UTC 표준 시간대로 바인딩되었습니다.
ASP.NET Core 5.0 이상에서는 모델 바인딩이 DateTime 값을 UTC 시간대와 일관되게 바인딩합니다.
이전 동작을 유지해야 하는 경우 Startup.ConfigureServices에서 DateTimeModelBinderProvider를 제거합니다.
services.AddControllersWithViews(options =>
options.ModelBinderProviders.RemoveType<DateTimeModelBinderProvider>());
ComplexObjectModelBinderProvider \ ComplexObjectModelBinder 교체 ComplexTypeModelBinderProvider \ ComplexTypeModelBinder
C# 9 레코드 형식의 모델 바인딩을 위한 지원을 추가하기 위해 ComplexTypeModelBinderProvider는 다음과 같습니다.
- 사용되지 않음으로 주석이 추가되었습니다.
- 더 이상 기본적으로 등록되지 않습니다.
ModelBinderProviders 컬렉션에서 ComplexTypeModelBinderProvider의 존재에 의존하는 앱은 새 바인더 공급자를 참조해야 합니다.
- var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexTypeModelBinderProvider>();
+ var complexModelBinderProvider = options.ModelBinderProviders.OfType<ComplexObjectModelBinderProvider>();
UseDatabaseErrorPage 되지 않는
개별 사용자 계정에 대한 옵션을 포함하는 ASP.NET Core 3.1 템플릿은 UseDatabaseErrorPage에 대한 호출을 생성합니다. UseDatabaseErrorPage는 이제 사용되지 않으며 다음 코드와 같이 AddDatabaseDeveloperPageExceptionFilter 및 UseMigrationsEndPoint의 조합으로 대체되어야 합니다.
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();
- app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
자세한 내용은 Obsoleting DatabaseErrorPage 미들웨어(dotnet/aspnetcore #24987)를 참조하세요.
ANCM(ASP.NET Core 모듈)
Visual Studio를 설치할 때 ANCM(ASP.NET Core 모듈)이 선택되지 않았거나 이전 버전의 ANCM이 시스템에 설치된 경우 최신 .NET Core 호스팅 번들 설치 관리자(직접 다운로드)를 다운로드하고 설치 관리자를 실행합니다. 자세한 내용은 호스팅 번들을 참조하세요.
애플리케이션 이름 변경
.NET 6 WebApplicationBuilder 에서 콘텐츠 루트 경로를 정규화하여 .DirectorySeparatorChar 마이그레이션하는 HostBuilderWebHostBuilder 대부분의 앱은 정규화되지 않으므로 동일한 앱 이름을 갖지 않습니다. 자세한 내용은 SetApplicationName을 참조하세요.
호환성이 손상되는 변경 검토
다음 리소스를 참조하세요.
- Identity: UI의 기본 부트스트랩 버전이 변경됨
- 버전 3.1에서 5.0으로 마이그레이션에 대한 호환성이 손상되는 변경 ASP.NET Core 및 Entity Framework Core도 목록에 포함됩니다.
- 버전 5.0에서 6.0으로 마이그레이션의 호환성이 손상되는 변경: ASP.NET Core 및 Entity Framework Core가 포함됩니다.
- 공지 GitHub 리포지토리(aspnet/Announcements,
6.0.0레이블): 호환성이 손상되는 정보와 작업을 중단하지 않는 정보가 포함됩니다. - 공지 GitHub 리포지토리(aspnet/Announcements,
5.0.0레이블): 호환성이 손상되는 정보와 작업을 중단하지 않는 정보가 포함됩니다.