다음을 통해 공유


.NET 7의 ASP.NET Core에서 .NET 8으로 마이그레이션

이 문서에서는 기존 ASP.NET Core 7.0 프로젝트를 ASP.NET Core 8.0으로 업데이트하는 방법을 설명합니다.

필수 조건

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

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

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

대상 프레임워크 업데이트

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

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

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

</Project>

패키지 참조 업데이트

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

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

Blazor

다음 마이그레이션 시나리오를 다룹니다.

ASP.NET Core 앱에 지원을 추가하는 Blazor 방법에 대한 지침은 MVC 또는 Razor Pages와 ASP.NET Core Razor 구성 요소 통합을 참조하세요.

Blazor Server 앱 업데이트

.NET 8에서는 s를 사용하는 Blazor Web App것이 좋지만 Blazor Server 지원됩니다. .NET 8에서 계속 사용 Blazor Server 하려면 이 문서의 처음 세 섹션에 있는 지침을 따릅니다.

Blazor.NET 8에서 실행되도록 업데이트된 Blazor Web App앱에서는 새로운 기능을 사용할 수 Blazor Server 없습니다. 새 .NET 8 Blazor 기능을 채택하려는 경우 다음 섹션 중 하나의 지침을 따르세요.

모든 Blazor Web App 규칙 채택

필요에 따라 모든 새 Blazor Web App 규칙을 채택하려면 다음 프로세스를 사용하는 것이 좋습니다.

  • 프로젝트 템플릿에서 Blazor Web App 새 앱을 만듭니다. 자세한 내용은 ASP.NET Core Blazor 도구를 참조하세요.
  • 앱의 구성 요소 및 코드를 새 Blazor Web App기능으로 이동하여 새 기능을 채택하도록 수정합니다.
  • 의 레이아웃 및 스타일을 업데이트합니다 Blazor Web App.

새로운 .NET 8 기능은 ASP.NET Core 8.0의 새로운 기능에서 다룹니다. .NET 6 이하에서 앱을 업데이트하는 경우 중간 릴리스에 대한 마이그레이션 및 릴리스 정보(새로운 문서)를 참조하세요.

앱을 로 변환 Blazor Web App

Blazor Server 앱은 코드 변경 없이 .NET 8에서 지원됩니다. 다음 지침을 사용하여 앱을 해당하는 .NET 8로 변환 Blazor Server 하면 모든 새 .NET 8 기능을 사용할 수 Blazor Web App있습니다.

Important

이 섹션에서는 .NET 7 Blazor Server 앱을 .NET 8 Blazor Web App로 변환하는 데 필요한 최소한의 변경 사항에 중점을 둡니다. 모든 새 Blazor Web App 규칙을 채택하려면 모든 Blazor Web App 규칙 채택 섹션의 지침을 따르세요.

  1. 이 문서의 처음 세 섹션에 있는 지침을 따릅니다.

  2. 구성 요소()의 App 내용을 프로젝트의 루트 폴더에 추가된 새 Routes 구성 요소 파일(Routes.razor)로App.razor 이동합니다. 프로젝트의 루트 폴더에 있는 앱의 빈 App.razor 파일을 그대로 둡니다.

  3. 약식 렌더링 모드를 앱에서 _Imports.razor 사용할 수 있도록 파일에 항목을 추가합니다.

    @using static Microsoft.AspNetCore.Components.Web.RenderMode
    
  4. 페이지(Pages/_Host.cshtml)의 _Host 콘텐츠를 빈 App.razor 파일로 이동합니다. 구성 요소를 다음과 같은 내용으로 변경합니다 App .

    참고 항목

    다음 예제에서 프로젝트의 네임스페이스는 BlazorServerApp입니다. 프로젝트와 일치하도록 네임스페이스를 조정합니다.

    파일 맨 위에서 다음 줄을 제거합니다.

    - @page "/"
    - @using Microsoft.AspNetCore.Components.Web
    - @namespace BlazorServerApp.Pages
    - @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
    

    앞의 줄을 인스턴스를 삽입하는 줄로 IHostEnvironment 바꿉니다.

    @inject IHostEnvironment Env
    

    태그에서 타일(~)을 href <base> 제거하고 앱의 기본 경로로 바꿉니다.

    - <base href="~/" />
    + <base href="/" />
    

    구성 요소에 대한 구성 요소 태그 도우미를 HeadOutlet 제거하고 구성 요소로 HeadOutlet 바꿉다.

    다음 줄을 제거합니다.

    - <component type="typeof(HeadOutlet)" render-mode="ServerPrerendered" />
    

    앞의 줄을 다음으로 바꿉다.

    <HeadOutlet @rendermode="InteractiveServer" />
    

    구성 요소에 대한 구성 요소 태그 도우미를 App 제거하고 구성 요소로 Routes 바꿉다.

    다음 줄을 제거합니다.

    - <component type="typeof(App)" render-mode="ServerPrerendered" />
    

    앞의 줄을 다음으로 바꿉다.

    <Routes @rendermode="InteractiveServer" />
    

    참고 항목

    이전 구성에서는 앱의 구성 요소가 대화형 서버 렌더링을 채택한다고 가정합니다. SSR(정적 서버 쪽 렌더링)을 채택하는 방법을 비롯한 자세한 내용은 ASP.NET Core Blazor 렌더링 모드를 참조하세요.

    오류 UI에 대한 환경 태그 도우미를 제거하고 다음 Razor 태그로 바꿉 있습니다.

    다음 줄을 제거합니다.

    - <environment include="Staging,Production">
    -     An error has occurred. This application may no longer respond until reloaded.
    - </environment>
    - <environment include="Development">
    -     An unhandled exception has occurred. See browser dev tools for details.
    - </environment>
    

    앞의 줄을 다음으로 바꿉다.

    @if (Env.IsDevelopment())
    {
        <text>
            An unhandled exception has occurred. See browser dev tools for details.
        </text>
    }
    else
    {
        <text>
            An error has occurred. This app may no longer respond until reloaded.
        </text>
    }
    

    스크립트를 Blazor 다음으로 blazor.server.js blazor.web.js변경합니다.

    - <script src="_framework/blazor.server.js"></script>
    + <script src="_framework/blazor.web.js"></script>
    
  5. Pages/_Host.cshtml 파일을 삭제합니다.

  6. 다음과 같이 Program.cs를 업데이트합니다.

    참고 항목

    다음 예제에서 프로젝트의 네임스페이스는 BlazorServerApp입니다. 프로젝트와 일치하도록 네임스페이스를 조정합니다.

    using 프로젝트 네임스페이스의 파일 맨 위에 문을 추가합니다.

    using BlazorServerApp;
    

    을 ( AddServerSideBlazor 을)로 AddRazorComponents 바꾸고 연결된 호출로 대체합니다 AddInteractiveServerComponents.

    다음 줄을 제거합니다.

    - builder.Services.AddServerSideBlazor();
    

    이전 줄을 구성 요소 및 대화형 서버 구성 요소 서비스로 Razor 바꿉니다. 호출은 AddRazorComponents 기본적으로 위조 방지 서비스(AddAntiforgery)를 추가합니다.

    builder.Services.AddRazorComponents()
        .AddInteractiveServerComponents();
    

    다음 줄을 제거합니다.

    - app.MapBlazorHub();
    

    위의 줄을 호출 MapRazorComponents로 바꾸고, 구성 요소를 루트 구성 요소 형식으로 제공하고 App , 연결된 호출을 추가합니다 AddInteractiveServerRenderMode.

    app.MapRazorComponents<App>()
        .AddInteractiveServerRenderMode();
    

    다음 줄을 제거합니다.

    - app.MapFallbackToPage("/_Host");
    

    라우팅 미들웨어 제거:

    - app.UseRouting();
    

    HTTPS 리디렉션 미들웨어(app.UseHttpsRedirection)를 추가하는 줄 뒤의 요청 처리 파이프라인에 위조 방지 미들웨어를 추가합니다.

    app.UseAntiforgery();
    

    앞에 오는 호출 app.UseAntiforgery 은 호출(있는 app.UseAuthentication 경우)과 app.UseAuthorization. 앞에서 설명한 대로 자동으로 AddRazorComponents추가되므로 위조 방지 서비스()builder.Services.AddAntiforgery를 명시적으로 추가할 필요가 없습니다.

  7. 미리 렌더링을 Blazor Server 사용하지 않도록 앱이 구성된 경우 업데이트된 앱에 대한 미리 렌더링을 계속 사용하지 않도록 설정할 수 있습니다. 구성 요소에서 AppRoutes 구성 요소에 대한 지시문 특성에 HeadOutlet @rendermodeRazor 할당된 값을 변경합니다.

    미리 렌더링을 @rendermode 사용하지 않도록 설정하려면 구성 요소와 Routes 구성 요소 모두에 HeadOutlet 대한 지시문 특성 값을 변경합니다.

    - @rendermode="InteractiveServer"
    + @rendermode="new InteractiveServerRenderMode(prerender: false)"
    

    자세한 내용은 ASP.NET Core Blazor 렌더링 모드를 참조하세요.

Blazor WebAssembly 앱 업데이트

이 문서의 처음 세 섹션에 있는 지침을 따릅니다.

지연 어셈블리 로드를 채택하는 앱의 경우 웹빌 어셈블리 패키징의 채택을 반영Blazor WebAssembly하도록 앱 구현에서 .dll .wasm 파일 확장자를 변경합니다.

.NET 8이 릴리스되기 전에 ASP.NET Core 호스팅 Blazor WebAssembly 앱에 대한 배포 레이아웃 지침은 클라이언트가 다중 파트 번들 접근 방식으로 DLL을 다운로드하고 실행하는 것을 차단하는 환경을 다룹니다. .NET 8 이상 Blazor 에서는 웹실 파일 형식을 사용하여 이 문제를 해결합니다. WebAssembly 배포 레이아웃 문서에서 설명하는 실험적 NuGet 패키지를 사용하는 다중 파트 번들링은 .NET 8 이상의 앱에서 지원 Blazor 되지 않습니다. .NET 8 이상 앱에서 다중 파트 번들 패키지를 계속 사용하려는 경우 문서의 지침을 사용하여 고유한 다중 파트 번들 NuGet 패키지를 만들 수 있지만 Microsoft에서는 지원하지 않습니다.

호스트 Blazor WebAssembly 된 앱을 로 변환 Blazor Web App

Blazor WebAssembly 앱은 코드 변경 없이 .NET 8에서 지원됩니다. 다음 지침을 사용하여 ASP.NET Core 호스팅 Blazor WebAssembly 앱을 해당하는 .NET 8 Blazor Web App로 변환하여 모든 새 .NET 8 기능을 사용할 수 있도록 합니다.

Important

이 섹션에서는 .NET 7 ASP.NET Core 호스팅 Blazor WebAssembly 앱을 .NET 8 Blazor Web App로 변환하는 데 필요한 최소한의 변경 사항에 중점을 둡니다. 모든 새 Blazor Web App 규칙을 채택하려면 모든 Blazor Web App 규칙 채택 섹션의 지침을 따르세요.

  1. 이 문서의 처음 세 섹션에 있는 지침을 따릅니다.

    Important

    위의 지침을 사용하여 솔루션의 .Client프로젝트를 .Server.Shared 업데이트합니다.

  2. .Client 프로젝트 파일(.csproj)에서 다음 MSBuild 속성을 추가합니다.

    <NoDefaultLaunchSettingsFile>true</NoDefaultLaunchSettingsFile>
    <StaticWebAssetProjectMode>Default</StaticWebAssetProjectMode>
    

    또한 프로젝트 파일에서 .Client 패키지 참조를 제거합니다 Microsoft.AspNetCore.Components.WebAssembly.DevServer .

    - <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer"... />
    
  3. 파일 콘텐츠를 프로젝트의 루트 .Server 에서 .Client/wwwroot/index.html 만든 새 App 구성 요소 파일(App.razor)로 이동합니다. 파일의 내용을 이동한 후 파일을 삭제합니다 index.html .

    프로젝트에서 Routes.razor이름을 .로 .Client 바꿉니다App.razor.

    에서 Routes.razor특성 값을 AppAssembly .로 업데이트합니다 typeof(Program).Assembly.

  4. .Client 프로젝트에서 파일에 항목을 _Imports.razor 추가하여 약식 렌더링 모드를 앱에서 사용할 수 있도록 합니다.

    @using static Microsoft.AspNetCore.Components.Web.RenderMode
    

    프로젝트 _Imports.razor 파일의 복사본을 .Client 만들어 프로젝트에 추가합니다.Server.

  5. App.razor 파일에 다음 변경 내용을 적용합니다.

    웹 사이트의 기본 웹 사이트 제목(<title>...</title>)을 구성 요소로 HeadOutlet 바꿉니다. 나중에 사용할 웹 사이트 제목을 확인하고 제목 태그와 제목을 제거합니다.

    - <title>...</title>
    

    제목을 제거한 경우 대화형 WebAssembly 렌더링 모드를 할당하는 구성 요소를 배치 HeadOutlet 합니다(미리 렌더링 사용 안 함).

    <HeadOutlet @rendermode="new InteractiveWebAssemblyRenderMode(prerender: false)" />
    

    CSS 스타일 번들을 변경합니다.

    - <link href="{CLIENT PROJECT ASSEMBLY NAME}.styles.css" rel="stylesheet">
    + <link href="{SERVER PROJECT ASSEMBLY NAME}.styles.css" rel="stylesheet">
    

    이전 코드의 자리 표시자:

    • {CLIENT PROJECT ASSEMBLY NAME}: 클라이언트 프로젝트 어셈블리 이름입니다. 예: BlazorSample.Client
    • {SERVER PROJECT ASSEMBLY NAME}: 서버 프로젝트 어셈블리 이름입니다. 예: BlazorSample.Server

    다음 HTML 태그를 <div>...</div> 찾습니다.

    - <div id="app">
    -     ...
    - </div>
    

    대화형 WebAssembly 렌더링 모드(미리 렌더링 사용 안 함)를 사용하여 위의 <div>...</div> HTML 태그를 구성 요소로 Routes 바꿉다.

    <Routes @rendermode="new InteractiveWebAssemblyRenderMode(prerender: false)" />
    

    스크립트를 다음으로 blazor.webassembly.js 업데이트합니다.blazor.web.js

    - <script src="_framework/blazor.webassembly.js"></script>
    + <script src="_framework/blazor.web.js"></script>
    
  6. 프로젝트의 레이아웃 파일()을 .Client 열고 웹 사이트의 기본 제목(.Client/Shared/MainLayout.razor{TITLE}자리 표시자)을 사용하여 구성 요소를 추가 PageTitle 합니다.

    <PageTitle>{TITLE}</PageTitle>
    

    참고 항목

    다른 레이아웃 파일도 기본 웹 사이트 제목이 있는 PageTitle 구성 요소를 받아야 합니다.

    자세한 내용은 ASP.NET Core Blazor 앱의 헤드 콘텐츠 제어를 참조하세요.

  7. 다음 줄에서 .Client/Program.cs제거합니다.

    - builder.RootComponents.Add<App>("#app");
    - builder.RootComponents.Add<HeadOutlet>("head::after");
    
  8. 다음과 같이 .Server/Program.cs를 업데이트합니다.

    프로젝트에 구성 요소 및 대화형 WebAssembly 구성 요소 서비스를 추가 Razor 합니다. 연결 호출을 사용하여 호출 AddRazorComponents 합니다 AddInteractiveWebAssemblyComponents. 호출은 AddRazorComponents 기본적으로 위조 방지 서비스(AddAntiforgery)를 추가합니다.

    builder.Services.AddRazorComponents()
        .AddInteractiveWebAssemblyComponents();
    

    요청 처리 파이프라인에 위조 방지 미들웨어를 추가합니다.

    호출 후 다음 줄을 배치합니다 app.UseHttpsRedirection. 호출 후에 호출해야 app.UseAntiforgery 합니다(있는 경우)app.UseAuthentication.app.UseAuthorization 앞에서 설명한 대로 자동으로 AddRazorComponents추가되므로 위조 방지 서비스()builder.Services.AddAntiforgery를 명시적으로 추가할 필요가 없습니다.

    app.UseAntiforgery();
    

    다음 줄을 제거합니다.

    - app.UseBlazorFrameworkFiles();
    

    다음 줄을 제거합니다.

    - app.MapFallbackToFile("index.html");
    

    위의 줄을 호출MapRazorComponents로 바꾸고, 구성 요소를 루트 구성 요소 유형으로 제공하고App, 연결된 호출을 AddInteractiveWebAssemblyRenderMode 추가합니다.AddAdditionalAssemblies

    app.MapRazorComponents<App>()
        .AddInteractiveWebAssemblyRenderMode()
        .AddAdditionalAssemblies(typeof({CLIENT APP NAMESPACE}._Imports).Assembly);
    

    앞의 예제 {CLIENT APP NAMESPACE} 에서 자리 표시자는 프로젝트의 네임스페이스 .Client (예: HostedBlazorApp.Client)입니다.

  9. 프로젝트에서 솔루션을 실행합니다..Server

    Visual Studio의 .Server 경우 앱을 실행할 때 솔루션 탐색기 프로젝트가 선택되어 있는지 확인합니다.

    .NET CLI를 사용하는 경우 프로젝트의 폴더에서 .Server 프로젝트를 실행합니다.

서비스 및 엔드포인트 옵션 구성 업데이트

.NET 8 Blazor 의 Blazor Web App릴리스에서 서비스 및 엔드포인트 옵션 구성은 대화형 구성 요소 서비스 및 구성 요소 엔드포인트 구성에 대한 새로운 API를 도입하여 업데이트됩니다.

업데이트된 구성 지침은 다음 위치에 표시됩니다.

  • 앱 환경 설정 및 읽기: 업데이트된 지침이 포함되어 있습니다. 특히 />의 환경 클라이언트 쪽 읽기 섹션에 있습니다.
  • 서버 쪽 회로 처리기 옵션: 새 BlazorSignalR 회로 및 허브 옵션 구성을 다룹니다.
  • JavaScript에서 구성 요소 렌더링Razor: 동적 구성 요소 등록을 RegisterForJavaScript포함합니다.
  • Blazor 사용자 지정 요소: Blazor Web App 등록: 루트 구성 요소 사용자 지정 요소 등록을 RegisterCustomElement포함합니다.
  • 자산의 Blazor WebAssembly 접두사: 자산의 접두사를 나타내는 경로 문자열의 제어를 Blazor WebAssembly 다룹니다.
  • 임시 리디렉션 URL 유효 기간: 서버 쪽 렌더링에서 내보내 Blazor 는 임시 리디렉션 URL에 대한 데이터 보호 유효성의 수명 제어를 다룹니다.
  • 자세한 오류: 구성 요소 서버 쪽 렌더링에 대한 Razor 자세한 오류를 사용하도록 설정하는 것을 다룹니다.
  • 미리 렌더링 구성: 미리 렌더링은 기본적으로 s에 대해 Blazor Web App사용하도록 설정됩니다. 사전 렌더링을 사용하지 않도록 설정하는 앱이 필요한 특별한 상황이 있는 경우 미리 렌더링을 사용하지 않도록 설정하는 방법에 대한 지침은 이 링크를 따르세요.
  • 양식 바인딩 옵션: 양식 바인딩 옵션 구성을 다룹니다.

Yarp 라우팅을 사용한 삭제 Blazor Server 해결 방법

이전에 Yarp를 사용하여 앱을 .NET 6 또는 .NET 7로 마이그레이션하기 Blazor Server 위한 증분 마이그레이션에서 Yarp로 ASP.NET Core Blazor Server 지원 사용의 지침을 따른 경우 문서의 지침을 따를 때 수행한 해결 단계를 되돌릴 수 있습니다. Yarp에 대한 Blazor Server 라우팅 및 딥 링크는 .NET 8에서 올바르게 작동합니다.

레이아웃 구성 요소의 구성 요소 마이그레이션 CascadingValue

연계 매개 변수는 렌더링 모드 경계를 넘어 데이터를 전달하지 않으며 레이아웃은 대화형 앱에서 정적으로 렌더링됩니다. 따라서 대화형으로 렌더링된 구성 요소에서 연계 매개 변수를 사용하려는 앱은 레이아웃에서 값을 연계할 수 없습니다.

마이그레이션에 대한 두 가지 방법은 다음과 같습니다.

  • (권장) 상태를 루트 수준 연계 값으로 전달합니다. 자세한 내용은 루트 수준 연계 값을 참조 하세요.
  • 구성 요소의 라우터를 Routes 구성 요소로 CascadingValue 래핑하고 Routes 구성 요소를 대화형으로 렌더링합니다. 예를 들어 구성 요소를 참조 CascadingValue 하세요.

자세한 내용은 Cascading 값/매개 변수 및 렌더링 모드 경계를 참조 하세요.

MSBuild 속성 마이그레이션 BlazorEnableCompression

압축을 사용하지 않도록 설정하고 .NET 7 이하를 대상으로 하지만 .NET 8 SDK로 빌드된 앱의 BlazorEnableCompression 경우 Blazor WebAssembly MSBuild 속성이 다음과 같이 CompressionEnabled변경되었습니다.

<PropertyGroup>
-   <BlazorEnableCompression>false</BlazorEnableCompression>
+   <CompressionEnabled>false</CompressionEnabled>
</PropertyGroup>

.NET CLI 게시 명령을 사용하는 경우 새 속성을 사용합니다.

dotnet publish -p:CompressionEnabled=false

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

구성 요소를 연계 인증 상태 서비스로 마이그레이션 <CascadingAuthenticationState>

.NET 7 이전 CascadingAuthenticationState 버전에서는 구성 요소가 UI 트리의 일부(예: 라우터 주위 Blazor )를 중심으로 래핑되어 연속 인증 상태를 제공합니다.

<CascadingAuthenticationState>
    <Router ...>
        ...
    </Router>
</CascadingAuthenticationState>

.NET 8에서는 구성 요소를 사용하지 마세요.CascadingAuthenticationState

- <CascadingAuthenticationState>
      <Router ...>
          ...
      </Router>
- </CascadingAuthenticationState>

대신 파일에서 Program 호출 AddCascadingAuthenticationState 하여 서비스 컬렉션에 연계 인증 상태 서비스를 추가합니다.

builder.Services.AddCascadingAuthenticationState();

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

HTTP 캐싱 문제에 대한 새 문서

주요 버전에서 앱을 업그레이드 Blazor 할 때 발생할 수 있는 몇 가지 일반적인 HTTP 캐싱 문제와 HTTP 캐싱 문제를 해결하는 방법을 설명하는 새 문서를 추가했습니다.

자세한 내용은 ASP.NET Core Blazor 앱을 업그레이드할 때 HTTP 캐싱 문제 방지를 참조하세요.

정적 서버 쪽 렌더링을 사용하는 클래스 라이브러리에 대한 새 문서(정적 SSR)

정적 서버 쪽 렌더링(정적 SSR)을 사용하여 클래스 라이브러리(RCL)의 구성 요소 라이브러리 작성 Razor 에 대해 설명하는 새 문서를 추가했습니다.

자세한 내용은 정적 서버 쪽 렌더링(정적 SSR)이 있는 ASP.NET Core Razor 클래스 라이브러리(RCL)를 참조하세요.

추가 어셈블리에서 구성 요소 검색

앱에서 Blazor Server 앱으로 마이그레이션할 Blazor Web App때 앱이 구성 요소 클래스 라이브러리와 같은 추가 어셈블리에서 라우팅 가능한 구성 요소를 사용하는 경우 ASP.NET Core Blazor 라우팅 및 탐색 의 지침에 액세스합니다.

쿼리 문자열에서 매개 변수를 제공할 때 특성 삭제 [Parameter]

[Parameter] 쿼리 문자열에서 매개 변수를 제공할 때 특성이 더 이상 필요하지 않습니다.

- [Parameter]
  [SupplyParameterFromQuery]

Blazor Server 스크립트 대체 정책 권한 부여

.NET 7 Blazor Server 에서 스크립트(blazor.server.js)는 정적 파일 미들웨어에서 제공됩니다. .NET 7 앱에서 인증 미들웨어(UseStaticFiles)를 호출하기 전에 요청 처리 파이프라인에 정적 파일 미들웨어(UseAuthorization)에 대한 호출을 배치하면 익명 사용자에게 스크립트를 제공하기 Blazor 에 충분합니다.

.NET 8 Blazor Server 에서 스크립트는 엔드포인트 라우팅을 사용하여 자체 엔드포인트에서 제공됩니다. 이 변경 내용은 고정 버그 - UseStaticFiles 중단 Blazor Server 에 옵션 전달(dotnet/aspnetcore#45897)에 의해 도입되었습니다.

다음과 같은 다중 테넌트 시나리오를 고려합니다.

  • 기본 정책과 대체 정책은 모두 동일하게 설정됩니다.
  • 테넌트는 요청 경로의 첫 번째 세그먼트(예: tld.com/tenant-name/...)를 사용하여 확인됩니다.
  • 테넌트 엔드포인트에 대한 요청은 추가 인증 체계에 의해 인증되며 요청 보안 주체에 추가 identity 됩니다.
  • 대체 권한 부여 정책에는 추가 identity클레임을 통해 클레임을 확인하는 요구 사항이 있습니다.

스크립트 파일(blazor.server.js)에 대한 Blazor 요청은 프레임워크에서 하드 코딩된 위치에서 /_framework/blazor.server.js제공됩니다. 파일에 대한 요청은 테넌트에 대한 추가 인증 체계에 의해 인증되지 않지만 대체 정책으로 인해 여전히 문제가 발생하여 권한이 없는 결과가 반환됩니다.

이 문제는 현재 2024년 11월에 .NET 9 릴리스로 예정된 FallbackPolicy RequireAuthenticatedUser(dotnet/aspnetcore 51836)로 인해 끊어진 MapRazorComponents의 새 프레임워크 기능에 대해 평가 중입니다. 그때까지 다음 세 가지 방법 중 원하는 방법을 사용하여 이 문제를 해결할 수 있습니다.

  • 대체 정책을 사용하지 마세요. 파일의 [Authorize] 특성을 _Imports.razor 적용하여 앱의 모든 구성 요소에 적용합니다. 비 엔드blazor 포인트의 경우 명시적으로 사용 [Authorize] 하거나 RequireAuthorization.

  • 파일의 /_framework/blazor.server.js 엔드포인트에 추가 [AllowAnonymous] 합니다.Program

    app.MapBlazorHub().Add(endpointBuilder =>
    {
        if (endpointBuilder is 
            RouteEndpointBuilder
            { 
                RoutePattern: { RawText: "/_framework/blazor.server.js" }
            })
        {
            endpointBuilder.Metadata.Add(new AllowAnonymousAttribute());
        }
    });
    
  • 파일을 허용하도록 확인하는 HttpContext사용자 지정 AuthorizationHandler /_framework/blazor.server.js 등록합니다.

Docker

Docker 이미지 업데이트

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

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

Docker 포트 업데이트

.NET 컨테이너 이미지에 구성된 기본 ASP.NET Core 포트가 포트 80에서 8080으로 업데이트되었습니다.

ASPNETCORE_HTTP_PORTS 환경 변수가 더 간단한 대안 ASPNETCORE_URLS으로 추가되었습니다.

자세한 내용은 다음을 참조하세요.

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

.NET Core .NET 7.0에서 8.0으로의 주요 변경 내용은 ASP.NET CoreEntity Framework Core 섹션을 포함하는 .NET 8의 주요 변경 내용을 참조하세요.