.NET 6 Preview 4 已发布,ASP.NET Core 更新内容( 三 )


文章插图
 
Visual Studio 中的 .NET 热重载支持仍在进行中 , 因此在 ASP.NET Core 应用程序中使用它时有一些限制:

  • 你必须在连接调试器的情况下运行以应用更改 。
  • 代码修改只能应用于 C# 文件--还不支持对 Razor 文件(.razor, .cshtml)的修改 。
  • 已应用的更改还不能强制更新用户界面 , 因此需要手动触发用户界面更新 。
  • 目前不支持 Blazor WebAssembly 应用程序 。
所有这些限制都在解决中 , 并将在未来的 Visual Studio 更新中得到解决 。敬请关注!
如果你通过 dotnet watch 使用 .NET 热重载 , 修改将被应用于 ASP.NET Core 托管的 Blazor WebAssembly 应用程序 。如果你刷新浏览器 , 修改也会重新应用到你的 Blazor WebAssembly 应用程序 。
要了解更多关于.NET 热重载的信息 , 你可以在我们的博文中获得所有细节:介绍.NET 热重载[6] 。
Razor 中的泛型约束在 Razor 中使用 @typeparam 指令定义通用类型参数时 , 你现在可以使用标准的 C# 语法指定泛型约束 。
@typeparam TEntity where TEntity : IEntityBlazor 错误边界Blazor 错误边界提供了一种方便的方式来处理组件层次结构中的异常情况 。为了定义一个错误边界 , 使用新的 ErrorBoundary 组件来包裹一些现有的内容 。只要一切运行顺利 , ErrorBoundary 组件将渲染其子内容 。如果一个未处理的异常被抛出 , ErrorBoundary 会渲染一些错误 UI 。
例如 , 我们可以像这样在默认 Blazor 应用程序的布局中添加一个错误边界:
<div class="main"><div class="top-row px-4"><a href=https://www.isolves.com/it/cxkf/yy/net/2021-05-27/"https://docs.microsoft.com/aspnet/" target="_blank" rel="noopener">About
@Body
该应用程序继续像以前一样运作 , 但现在我们的错误边界将处理未处理的异常 。例如 , 我们可以更新 Counter 组件 , 在计数过大时抛出一个异常 。
private void IncrementCount(){currentCount++;if (currentCount > 10){throw new InvalidOperationException("Current count is too big!");}}现在 , 如果我们过多地点击计数器 , 就会抛出一个未处理的异常 , 这将由我们的错误边界通过渲染一些默认的错误界面来处理 。
.NET 6 Preview 4 已发布,ASP.NET Core 更新内容

文章插图
 
默认情况下 , ErrorBoundary 组件为其错误内容渲染了一个带有 blazor-error-boundary css 类的空 div 。这个默认界面的颜色、文本和图标都是在应用程序中使用 CSS 定义的 , 所以你可以自由地定制它们 。你也可以通过设置 ErrorContent 属性来改变默认的错误内容 。
<ErrorBoundary><ChildContent> @Body </ChildContent><ErrorContent><p class="my-error">Nothing to see here right now. Sorry!</p></ErrorContent></ErrorBoundary>因为我们在布局中定义了错误边界 , 一旦抛出一个异常 , 不管我们导航到哪个页面我们都能看到错误内容 。一般来说 , 错误边界的范围最好比这更窄 , 但我们可以选择在随后的页面导航中通过调用错误边界的恢复方法将错误边界重置为非错误状态 。
...<ErrorBoundary @ref="errorBoundary">@Body</ErrorBoundary>...@code {ErrorBoundary errorBoundary;protected override void OnParametersSet(){// On each page navigation, reset any error stateerrorBoundary?.Recover();}}Blazor WebAssembly 的 AOT 编译Blazor WebAssembly 现在支持 AOT(ahead-of-time) 编译 , 你可以将你的 .NET 代码直接编译为 WebAssembly , 以显著提高运行时性能 。现在 Blazor WebAssemby 应用程序使用 WebAssembly 中实现的 .NET IL 解释器运行 。由于 .NET 代码是被解释的 , 通常这意味着在 WebAssembly 上运行的 .NET 代码比在正常的.NET 运行时要慢得多 。.NET WebAssembly AOT 编译通过将你的 .NET 代码直接编译成 WebAssembly 来解决这个性能问题 。
AOT 编译你的 Blazor WebAssembly 应用程序 , 对于 CPU 密集型任务来说 , 其性能的提高是相当显著的 。例如 , 下面的片段显示了使用相同的 Blazor WebAssembly 应用程序进行一些基本图像编辑的比较 , 首先使用解释器 , 然后是 AOT 编译 。AOT 编译后的版本运行速度快了五倍以上 。


推荐阅读