다음을 통해 공유


ASP.NET Core 호스트 및 배포 Blazor

참고

이 문서의 최신 버전은 아닙니다. 현재 릴리스는 이 문서의 .NET 9 버전을 참조 하세요.

경고

이 버전의 ASP.NET Core는 더 이상 지원되지 않습니다. 자세한 내용은 .NET 및 .NET Core 지원 정책을 참조 하세요. 현재 릴리스는 이 문서의 .NET 9 버전을 참조 하세요.

중요

이 정보는 상업적으로 출시되기 전에 실질적으로 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적, 또는 묵시적인 보증을 하지 않습니다.

현재 릴리스는 이 문서의 .NET 9 버전을 참조 하세요.

이 문서에서는 Blazor 앱을 호스트하고 배포하는 방법을 설명합니다.

앱 게시

앱은 릴리스 구성으로 배포하기 위해 게시됩니다.

참고

Blazor WebAssembly 프로젝트에서 호스팅된 솔루션을 게시합니다.

  1. 빌드 메뉴에서 게시 {APPLICATION} 명령을 선택합니다. 여기서 {APPLICATION} 자리 표시자는 앱의 이름입니다.
  2. publish target을 선택합니다. 로컬로 게시하려면 폴더를 선택합니다.
  3. 폴더 선택 필드에서 기본 위치를 그대로 사용하거나 다른 위치를 지정합니다. Publish 단추를 선택합니다.

앱을 게시하면 배포할 자산을 만들기 전에 프로젝트 종속성의 복원과 프로젝트의 빌드가 트리거됩니다. 빌드 프로세스의 일부로 앱 다운로드 크기와 로드 시간을 줄이기 위해 사용하지 않는 메서드와 어셈블리를 제거합니다.

기본 게시 위치

  • Blazor Web App: 앱이 /bin/Release/{TARGET FRAMEWORK}/publish 폴더에 게시됩니다. 여기서 {TARGET FRAMEWORK} 자리 표시자는 대상 프레임워크입니다. 호스트에 publish 폴더의 콘텐츠를 배포합니다.
  • 독립 실행형 Blazor WebAssembly: 앱이 bin/Release/{TARGET FRAMEWORK}/publish 또는 bin/Release/{TARGET FRAMEWORK}/browser-wasm/publish 폴더에 배포됩니다. 앱을 정적 사이트로 배포하려면 wwwroot 폴더의 내용을 정적 사이트 호스트에 복사합니다.
  • Blazor Server: 앱이 /bin/Release/{TARGET FRAMEWORK}/publish 폴더에 게시됩니다. 여기서 {TARGET FRAMEWORK} 자리 표시자는 대상 프레임워크입니다. 호스트에 publish 폴더의 콘텐츠를 배포합니다.
  • Blazor WebAssembly
    • 독립 실행형: 앱이 /bin/Release/{TARGET FRAMEWORK}/publish 또는 bin/Release/{TARGET FRAMEWORK}/browser-wasm/publish 폴더에 게시됩니다. 앱을 정적 사이트로 배포하려면 wwwroot 폴더의 내용을 정적 사이트 호스트에 복사합니다.
    • 호스트됨: 서버 ASP.NET Core 앱 및 클라이언트 Blazor WebAssembly 앱은 클라이언트 앱의 정적 웹 자산과 함께 서버 앱의 폴더에 게시 /bin/Release/{TARGET FRAMEWORK}/publish 됩니다. 호스트에 publish 폴더의 콘텐츠를 배포합니다.

IIS

IIS에서 Blazor 앱을 호스트하려면 다음 리소스를 참조하세요.

  • IIS 호스팅
  • Windows OS 및 Azure App Service를 실행하는 ASP.NET Azure VM(Virtual Machines)이 있는 IIS를 포함하여 IIS에서 실행되는 core 서버 쪽 BlazorBlazor Web App앱(.NET 8 이상) 및 Blazor Server 앱(.NET 7 이하)을 호스트하고 배포합니다.
  • IIS: 독립 실행형 Blazor WebAssembly 앱(모든 .NET 릴리스) 및 호스트된 앱(.NET 7 이하)을 사용하여 Blazor WebAssembly하고 배포합니다.
  • IIS 하위 애플리케이션 호스팅
    • 앱을 게시하기 전에 앱 기본 경로 지침을 따릅니다. 예제에서는 앱 기본 경로를 /CoolApp 사용하고 앱 설정 또는 다른 구성 공급자에서 기본 경로를 가져오는 방법을 보여 줍니다.
    • 고급 구성의 하위 애플리케이션 구성 지침을 따릅니다. 루트 사이트 아래에 있는 하위 앱의 폴더 경로는 하위 앱의 가상 경로가 됩니다. /CoolApp의 앱 기본 경로의 경우, Blazor 앱은 루트 사이트 아래에 있는 CoolApp이라는 폴더에 배치되고 하위 앱은 /CoolApp의 가상 경로를 사용합니다.

Blazor 앱을 포함하여 ASP.NET Core 앱 간에 앱 풀을 공유하는 것은 지원되지 않습니다. IIS를 사용하여 호스트할 때 앱당 하나의 앱 풀을 사용하고 여러 앱을 호스트하기 위해 IIS의 가상 디렉터리를 사용하지 않도록 합니다.

ASP.NET Core 앱에 의해 호스팅된 하나 이상의 Blazor WebAssembly 앱은 호스팅된 Blazor WebAssembly 솔루션으로서 하나의 앱 풀을 지원합니다. 그러나 호스트된 여러 Blazor WebAssembly 솔루션이나 하위 앱 호스팅 시나리오에 단일 앱 풀을 할당하는 것을 권장하거나 지원하지 않습니다.

솔루션에 대한 자세한 내용은 ASP.NET Core Blazor용 도구를 참조하세요.

Blazor Server MapFallbackToPage 구성

이 섹션은 Blazor Server 앱에만 적용됩니다. MapFallbackToPage는 Blazor Web App 및 Blazor WebAssembly 앱에서는 지원되지 않습니다.

앱에 사용자 지정 리소스와 Razor 구성 요소가 포함된 별도의 영역이 필요한 시나리오의 경우:

  • 앱의 Pages 폴더 내에 리소스를 보관할 폴더를 만듭니다. 예를 들어 앱의 관리자 섹션이 Admin(Pages/Admin)이라는 새 폴더에 만들어집니다.

  • 영역의 루트 페이지(_Host.cshtml)를 만듭니다. 예를 들어 앱의 주 루트 페이지(Pages/Admin/_Host.cshtml)에서 Pages/_Host.cshtml 파일을 만듭니다. Admin @page 페이지에 _Host 지시문을 제공하지 마세요.

  • 영역 폴더에 레이아웃을 추가합니다(예: Pages/Admin/_Layout.razor). 별도 영역의 레이아웃에서 영역의 폴더와 일치하도록 <base> 태그 href를 설정합니다(예: <base href="/Admin/" />). 데모용으로 페이지의 정적 리소스에 ~/를 추가합니다. 예시:

    • ~/css/bootstrap/bootstrap.min.css
    • ~/css/site.css
    • ~/BlazorSample.styles.css(예제 앱의 네임스페이스는 BlazorSample임)
    • ~/_framework/blazor.server.js(Blazor 스크립트)
  • 영역에 고유한 정적 자산 폴더가 있어야 하는 경우 폴더를 추가하고 Program.cs의 정적 파일 미들웨어로 위치를 지정합니다(예: app.UseStaticFiles("/Admin/wwwroot")).

  • Razor 구성 요소가 영역의 폴더에 추가됩니다. 최소한, 영역에 대한 올바른 Index 지시문을 사용하여 @page 구성 요소를 영역 폴더에 추가합니다. 예를 들어 앱의 기본 Pages/Admin/Index.razor 파일을 기반으로 Pages/Index.razor 파일을 추가합니다. 파일 맨 위에 경로 템플릿으로 Admin 영역을 나타냅니다(@page "/admin"). 필요에 따라 추가 구성 요소를 추가합니다. 예를 들어 Pages/Admin/Component1.razor 지시문과 @page, @page "/admin/component1 경로 템플릿을 사용하는 경우.

  • Program.cs에서 영역의 요청 경로에 대해 MapFallbackToPage를 호출하고, 이는 _Host 페이지의 대체 루트 페이지 경로 바로 앞에 위치합니다.

    ...
    app.UseRouting();
    
    app.MapBlazorHub();
    app.MapFallbackToPage("~/Admin/{*clientroutes:nonfile}", "/Admin/_Host");
    app.MapFallbackToPage("/_Host");
    
    app.Run();