Share via


ASP.NET Core 6.0에서 7.0으로 마이그레이션하기

이 문서에서는 기존의 ASP.NET Core 6.0 프로젝트를 ASP.NET Core 7.0으로 변경하는 방법을 설명합니다.

필수 조건

에서 .NET Core SDK 버전 업데이트 global.json

특정 .NET Core SDK 버전을 대상으로 하는 파일을 사용하는 global.json 경우 설치된 .NET 7.0 SDK 버전으로 속성을 업데이트 version 합니다. 예시:

{
  "sdk": {
-    "version": "6.0.200"
+    "version": "7.0.100"
  }
}

대상 프레임워크 업데이트

프로젝트 파일의 TFM(대상 프레임워크 모니커)net7.0으로 업데이트합니다.

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
-    <TargetFramework>net6.0</TargetFramework>
+    <TargetFramework>net7.0</TargetFramework>
  </PropertyGroup>

</Project>

패키지 참조 업데이트

프로젝트 파일에서 각 Microsoft.AspNetCore.*, Microsoft.EntityFrameworkCore.*, Microsoft.Extensions.*System.Net.Http.Json 패키지 참조의 Version 특성을 7.0.0 이상으로 업데이트합니다. 예시:

<ItemGroup>
-    <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="6.0.9" />
-    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="6.0.9" />
-    <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="6.0.9" />
-    <PackageReference Include="System.Net.Http.Json" Version="6.0.0" />
+    <PackageReference Include="Microsoft.AspNetCore.JsonPatch" Version="7.0.0" />
+    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="7.0.0" />
+    <PackageReference Include="Microsoft.Extensions.Caching.Abstractions" Version="7.0.0" />
+    <PackageReference Include="System.Net.Http.Json" Version="7.0.0" />
</ItemGroup>

Blazor

.NET 7 기능 채택

이 문서의 앞부분에 있는 지침에 따라 앱을 7.0으로 업데이트한 후 ASP.NET Core 7.0의 새로운 기능 링크를 따라 특정 기능을 채택합니다.

Blazor 앱의 새 7.0 기능을 모두 채택하려면 다음 프로세스를 따르세요.

  • Blazor 프로젝트 템플릿 중 하나에서 새 7.0 Blazor 프로젝트를 만듭니다. 자세한 내용은 ASP.NET Core Blazor 도구를 참조하세요.
  • 앱의 구성 요소와 코드를 새 7.0 기능을 채택하도록 수정된 7.0 앱으로 이동합니다.

역마샬링된 JavaScript interop 마이그레이션

IJSUnmarshalledRuntime인터페이스를 사용하는 역마샬링된 interop는 사용되지 않으며 JavaScript [JSImport]/[JSExport] interop로 대체되어야 합니다.

자세한 내용은 JavaScript JSImport/JSExport interop 및 ASP.NET Core Blazor를 참조하세요.

Blazor WebAssembly 인증은 리디렉션에 기록 상태를 사용합니다.

앱의 Blazor WebAssembly 인증 지원은 URL의 쿼리 문자열 대신 탐색 기록 상태에 의존하도록 변경되었습니다. 결과적으로 쿼리 문자열을 통해 반환 URL을 전달하면 .NET 7에서 성공적으로 로그인한 후 원래 페이지로 다시 리디렉션되지 않습니다.

다음 예제에서는 NavigateTo를 사용하는 리디렉션 URL(?returnUrl=)을 기반으로 하는 .NET 6 이하를 대상으로 하는 앱에 대한 이전 리디렉션 방법을 보여줍니다.

@inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@code {
    protected override void OnInitialized()
    {
        Navigation.NavigateTo(
            $"authentication/login?returnUrl={Uri.EscapeDataString(Navigation.Uri)}");
    }
}

다음 예제에서는 NavigateToLogin를 사용하여 탐색 기록 상태를 기반으로 하는 .NET 7 이상을 대상으로 하는 앱에 대한 새로운 리디렉션 방법을 보여줍니다.

@inject NavigationManager Navigation
@using Microsoft.AspNetCore.Components.WebAssembly.Authentication
@using Microsoft.Extensions.Options

@inject IOptionsSnapshot<RemoteAuthenticationOptions<ApiAuthorizationProviderOptions>> OptionsSnapshot
@code {
    protected override void OnInitialized()
    {
        Navigation.NavigateToLogin(OptionsSnapshot.Get(Options.DefaultName).AuthenticationPaths.LogInPath);
    }
}

이 변경의 일부로서, SignOutSessionStateManager은 .NET 7 이상에서 사용되지 않으며 NavigateToLogout로 바뀝니다.

다음 예제에서는 Blazor WebAssembly 프로젝트 템플릿에서 생성된 앱의 에서 이전 방법Shared/LoginDisplay.razor을 보여줍니다.

@inject SignOutSessionStateManager SignOutManager

...

@code{
    private async Task BeginLogout(MouseEventArgs args)
    {
        await SignOutManager.SetSignOutState();
        Navigation.NavigateTo("authentication/logout");
    }
}

다음 예제에서는 NavigateToLogout를 호출하는 새로운 방법을 보여줍니다. SignOutSessionStateManager의 삽입(@inject)은 파일 맨 위에 있는 구성 요소의 지시문에서 제거되고 BeginLogOut 메서드는 다음 코드로 업데이트됩니다.

@code{
    public void BeginLogOut()
    {
        Navigation.NavigateToLogout("authentication/logout");
    }
}

Program.cs에서 SignOutSessionStateManager 서비스 등록이 제거됩니다.

- builder.Services.AddScoped<SignOutSessionStateManager>();

자세한 내용은 다음 리소스를 참조하세요.

.NET 6 프로젝트용 .NET WebAssembly 빌드 도구

이제 .NET 7 SDK로 작업할 때 .NET 6 프로젝트에서 .NET WebAssembly 빌드 도구를 사용할 수 있습니다. 새 wasm-tools-net6 워크로드에는 .NET 7 SDK와 함께 사용할 수 있도록 .NET 6 프로젝트에 대한 .NET WebAssembly 빌드 도구가 포함되어 있습니다. 기존 wasm-tools 워크로드는 .NET 7 프로젝트에 대한 .NET WebAssembly 빌드 도구를 설치합니다. 그러나 .NET WebAssembly 빌드 도구의 .NET 7 버전은 .NET 6으로 빌드된 기존 프로젝트와 호환되지 않습니다. .NET 6 및 .NET 7을 모두 지원해야 하는 .NET WebAssembly 빌드 도구를 사용하는 프로젝트는 다중 대상 지정을 사용해야 합니다.

Docker 이미지 업데이트

Docker를 사용하는 앱의 경우 DockerfileFROM 문과 스크립트를 업데이트합니다. ASP.NET Core 7.0 런타임을 포함하는 기본 이미지를 사용합니다. ASP.NET Core 6.0과 7.0 간에 다음 docker pull 명령 차이를 고려합니다.

- docker pull mcr.microsoft.com/dotnet/aspnet:6.0
+ docker pull mcr.microsoft.com/dotnet/aspnet:7.0

호환성이 손상되는 변경 검토

.NET Core 6.0에서 .NET 7.0으로의 호환성이 손상되는 변경 내용은 .NET 7의 호환성이 손상되는 변경 내용을 참조하세요. ASP.NET Core 및 Entity Framework Core이 목록에 포함됩니다.