托管和部署 ASP.NET Core Blazor

注意

此版本不是本文的最新版本。 有关当前版本,请参阅.NET 9 版本的本文

警告

此版本的 ASP.NET Core 不再受支持。 有关详细信息,请参阅 .NET 和 .NET Core 支持策略。 有关当前版本,请参阅.NET 9 版本的本文

重要

此信息与预发布产品相关,相应产品在商业发布之前可能会进行重大修改。 Microsoft 对此处提供的信息不提供任何明示或暗示的保证。

有关当前版本,请参阅.NET 9 版本的本文

本文介绍如何托管和部署 Blazor 应用。

发布应用

发布应用,用于发布配置中的部署。

注意

从 Blazor WebAssembly 项目发布托管的 Server

  1. 构建菜单中选择发布 {APPLICATION}命令,其中{APPLICATION}占位符为应用程序的名称。
  2. 选择“发布目标”。 若要在本地发布,请选择“文件夹”
  3. 接受“选择文件夹”字段中的默认位置,或指定其他位置。 选择 Publish 按钮。

发布应用程序会触发项目依赖项的还原生成项目,然后创建部署资产。 在生成过程期间,将删除未使用的方法和程序集,以减少应用下载大小并缩短加载时间。

默认发布位置

  • Blazor Web App:应用发布到 /bin/Release/{TARGET FRAMEWORK}/publish 文件夹中,其中 {TARGET FRAMEWORK} 占位符是目标框架。 将 publish 文件夹的内容部署到主机。
  • 独立 Blazor WebAssembly:应用发布到 bin/Release/{TARGET FRAMEWORK}/publishbin/Release/{TARGET FRAMEWORK}/browser-wasm/publish 文件夹中。 若要将应用部署为静态站点,请将 wwwroot 文件夹的内容复制到静态站点主机。
  • Blazor Server:应用发布到 /bin/Release/{TARGET FRAMEWORK}/publish 文件夹中,其中 {TARGET FRAMEWORK} 占位符是目标框架。 将 publish 文件夹的内容部署到主机。
  • Blazor WebAssembly
    • 独立:应用发布到 /bin/Release/{TARGET FRAMEWORK}/publishbin/Release/{TARGET FRAMEWORK}/browser-wasm/publish 文件夹中。 若要将应用部署为静态站点,请将 wwwroot 文件夹的内容复制到静态站点主机。
    • 托管:服务器 ASP.NET 核心应用和客户端 Blazor WebAssembly 应用发布到 /bin/Release/{TARGET FRAMEWORK}/publish 服务器应用的文件夹,以及客户端应用的任何静态 Web 资产。 将 publish 文件夹的内容部署到主机。

IIS

若要在 IIS 中托管 Blazor 应用,请参阅以下资源:

不支持在 ASP.NET Core 应用之间共享应用池,包括 Blazor 应用。 当使用 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();