注意
此版本不是本文的最新版本。 有关当前版本,请参阅.NET 9 版本的本文。
警告
此版本的 ASP.NET Core 不再受支持。 有关详细信息,请参阅 .NET 和 .NET Core 支持策略。 有关当前版本,请参阅.NET 9 版本的本文。
本文介绍如何托管和部署 Blazor 应用。
发布应用
发布应用,用于发布配置中的部署。
- 从构建菜单中选择发布 {APPLICATION}命令,其中
{APPLICATION}
占位符为应用程序的名称。 - 选择“发布目标”。 若要在本地发布,请选择“文件夹”。 选择“下一步”。
- 在本地发布时,接受默认文件夹位置或指定其他位置。 选择 “完成 ”以保存配置文件。 选择 关闭。
- 若要在发布应用之前清理目标的发布文件夹,请选择“ 显示所有设置”。 选择 “设置>文件发布选项>”,在发布之前删除所有现有文件。 选择“保存”。
- 选择发布按钮。
发布应用程序会触发项目依赖项的还原并生成项目,然后创建部署资产。 在生成过程期间,将删除未使用的方法和程序集,以减少应用下载大小并缩短加载时间。
清空目标发布文件夹
使用 dotnet publish
命令行界面中的命令发布应用时,该命令会根据项目的当前状态生成部署所需的文件,并将文件放入指定的输出文件夹中。 发布应用之前,该命令不会自动清理目标文件夹。
若要在发布应用之前自动清空目标文件夹,请将以下 MSBuild 目标添加到应用的项目文件(.csproj
)的根 <Project>
元素下:
<Target Name="_RemovePublishDirBeforePublishing" BeforeTargets="BeforePublish">
<RemoveDir Directories="$(PublishDir)" Condition="'$(PublishDir)' != ''" />
</Target>
默认发布位置
- 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 核心应用和客户端 Blazor WebAssembly 应用发布到
/bin/Release/{TARGET FRAMEWORK}/publish
服务器应用的文件夹,以及客户端应用的任何静态 Web 资产。 将publish
文件夹的内容部署到主机。
- 独立:应用发布到
IIS
若要在 IIS 中托管 Blazor 应用,请参阅以下资源:
- IIS 托管
- 托管和部署 ASP.NET Core 服务器端 Blazor 应用:Blazor Web App 应用(.NET 8 或更高版本)和在 IIS 上运行的应用(.NET 7 或更早版本),包括在 Azure 虚拟机(VM)上运行 Windows 操作系统的 IIS 和 Azure 应用服务。
- 使用 IIS 托管和部署 ASP.NET CoreBlazor WebAssembly:独立Blazor WebAssembly应用(所有 .NET 版本)和托管Blazor WebAssembly应用(.NET 7 或更早版本)。
- IIS 子应用程序托管
- 在发布应用之前,请遵循 应用基础路径指南 。 这些示例使用应用基路径
/CoolApp
,展示了如何从应用设置或其他配置提供程序获取基路径。 - 按照高级配置中的子应用程序配置指南进行操作。 根站点下的子应用文件夹路径将成为子应用的虚拟路径。 对于
/CoolApp
的应用基路径,Blazor 应用放置在根站点下名为CoolApp
的文件夹中,子应用采用虚拟路径/CoolApp
。
- 在发布应用之前,请遵循 应用基础路径指南 。 这些示例使用应用基路径
不支持在 ASP.NET Core 应用之间共享应用池,包括 Blazor 应用。 当使用 IIS 进行托管时,为每个应用使用一个应用池,并避免使用 IIS 的虚拟目录来承载多个应用。
一个应用池支持一个或多个由 ASP.NET Core 应用托管的 Blazor WebAssembly 应用(称为托管的 Blazor WebAssembly 解决方案)。 但是,不建议也不支持将单个应用池分配到多个托管 Blazor WebAssembly 解决方案或子应用托管方案。
有关解决方案的详细信息,请参阅用于 ASP.NET Core Blazor 的工具。
JavaScript 捆绑程序支持
Blazor 运行时依赖于 JavaScript(JS)文件、编译为 WebAssembly 的 .NET 运行时和作为 WebAssembly 文件打包的托管程序集。 当构建 Blazor 应用时,Blazor 运行时依赖于来自不同构建位置的这些文件。 由于此约束,Blazor 的生成输出与 JS 的打包工具(如 Gulp、Webpack 和 Rollup)不兼容。
若要在发布过程中生成与JS捆绑程序兼容的生成输出,请将 WasmBundlerFriendlyBootConfig
MSBuild 属性设置为true
应用的项目文件中:
<WasmBundlerFriendlyBootConfig>true</WasmBundlerFriendlyBootConfig>
重要
此功能仅在发布应用时生成捆绑程序友好的输出。
输出不能直接在浏览器中运行,但可以被 JS 工具用来将 JS 文件与开发人员提供的脚本的其余部分捆绑在一起。
当启用WasmBundlerFriendlyBootConfig
时,生成的JS包含import
应用中所有资产的指令,这使得打包器可以看到依赖项。 浏览器无法加载许多资产,但捆绑程序通常可配置为按文件类型识别资产以处理加载。 有关如何配置捆绑程序的详细信息,请参阅捆绑程序的文档。
注意
通过使用 JS 打包器自定义插件映射导入路径到各个文件位置,打包构建输出是可行的。 目前我们不提供此类插件。
注意
将 files
插件替换为 url
,所有应用 JS 的文件(包括 Blazor-WebAssembly 运行时(base64 编码在 JS 中)都被捆绑到输出文件中。 与使用 files
插件整理文件时相比,文件体积要大得多(例如,大 300%),因此不建议在为 JS 打包器生成友好的输出时普遍使用 url
插件。
以下示例应用基于 Rollup。 使用其他 JS 打包工具时,类似的概念适用。
演示示例应用:
Blazor ServerMapFallbackToPage
配置
本部分仅适用于 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();