Marvin's Blog【程式人生】

Ability will never catch up with the demand for it

18 Aug 2021

Blazor WebAssembly及其AOT支持

创建一个blazorwasm项目

对应的dotnet命令行是dotnet new blazorwasm,可以在后面加上-h查看可能的选项。--https就是可用的选项之一。

下面的命令创建一个名为wasm1的blazorwasm项目,其内容会生成在与项目同名的目录下:

dotnet new blazorwasm -o wasm1 --no-https

进入wasm1目录,执行dotnet publish,就会在wasm1\bin\Debug\net6.0\publish\目录下生成可以部署的文件。默认是Debug配置,若想生成Release配置,需要执行dotnet publish -c:Release

不管Debug还是Release配置都会优化集结件的大小,参考https://aka.ms/dotnet-illink。Release看起来还有一个使用emcc编译静态物资的步骤。

可以看到生成的wwwroot中的_framework目录有着.NET运行所需文件。默认情况文件会以两种方式压缩,一种是brotli,生成的文件以br为后缀;另一种是gzip压缩,生成的文件以gz为后缀。若要取消压缩,根据 [blazor] Turn Off/On gzip and brotli compressing of published files #21728 ,可以将MSBuild的旗标BlazorEnableCompression设置为false,例如:

dotnet publish -p:BlazorEnableCompression=false

或者在工程文件中做如下设置:

<PropertyGroup>
  <BlazorEnableCompression>false</BlazorEnableCompression>
</PropertyGroup>

在文档https://docs.microsoft.com/en-us/aspnet/core/blazor/host-and-deploy/webassembly?view=aspnetcore-6.0#compression中有描述。

WASM AOT相关

WASM AOT实现尚不能形成单一文件,参考 Developers can AOT compile .NET apps into WebAssembly format #44316 ,因为目前仍然需要下载DLLs,参考Blazor AOT .Net6 Preview 7 - Still downloading Dlls dotnet/aspnetcore#35302

2021-08-10 ASP.NET Core updates in .NET 6 Preview 7

安装wasm-tools

dotnet workload install wasm-tools

从旧版本升级,只须将对下面两个nuget包的引用升级至6.0.0-preview.7.*

  • Microsoft.AspNetCore.*
  • Microsoft.Extensions.*

其他亮点

  • Blazor组件可以直接从URL的query字符串接收参数了
  • NavigationManager.NavigateTo可以替换浏览器的地址历史了
  • 支持从JS到.NET的流数据互操作
  • Blazor可以采用PageTitle以及HeadContent来修改<head>元素
  • DynamicComponent新增了Instance辖属

2021-07-14 ASP.NET Core updates in .NET 6 Preview 6

其他亮点

  • 提升了Blazor的可访问性
  • 添加了必须的组件参数属性[EditorRequired]
  • 字节数组的JS互操作不需要JSON序列化了
  • 视图组件的标记助手中的参数变为可选了

2021-06-17 ASP.NET Core updates in .NET 6 Preview 5

减少WASM的.NET运行时(dotnet.wasm)的尺寸。这是通过重链接(relinking)达到的。当发布一个应用的时候,会自动进行重链接。

通过将InvariantGlobalization设置为true可以关掉全球化功能,从而降低下载包的尺寸。

其他亮点

  • .NET支持热重载了,使用donet watch
  • SVG的foreignObject元素中支持使用Razor语句
  • 对于类型为Action以及RenderFragment的组件参数,其值可以是null

2021-05-25 ASP.NET Core updates in .NET 6 Preview 4

WebAssembly的AOT编译应该首次出现在此。

使用AOT编译需要设置以下选项:

<RunAOTCompilation>true</RunAOTCompilation>

AOT旨在加快运行时的速度,因为无需诠释IL。确定时AOT产生的运行件体积可能会翻倍,导致加载速度延长。

其他亮点

  • 组件支持@typeparam TEntity where TEntity : IEntity
  • 组件支持ErrorBoundary
  • .NET MAUI Blazor应用亮相

2012-04-08 ASP.NET Core updates in .NET 6 Preview 3

其余亮点:

  • Razor编译器不再采用两步的策略来生成视图集结件了,而是直接集成到主项目集结件中。这些视图类默认为internal sealed,放置在根目录AspNetCoreGeneratedDocument之下。
  • BlazorWebView 可用于WPF和WinForms

2021-03-11 ASP.NET Core updates in .NET 6 Preview 2

其余亮点:

  • Razor编译器使用了source generator
  • Blazor支持自定义事件参数
  • Blazor支持prerenderred state的存留

2021-02-17 ASP.NET Core updates in .NET 6 Preview 1

列出.NET6计划支持的一些特性

其他参考

(本篇完)

Categories