配置 ASP.NET Core Blazor 链接器Configure the Linker for ASP.NET Core Blazor

本文内容

作者:Luke Latham

重要

Blazor WebAssembly 为预览版状态

ASP.NET Core 3.0 支持 Blazor Server。Blazor WebAssembly 在 ASP.NET Core 3.1 中为预览版。

Blazor WebAssembly 在生成期间执行中间语言 (IL) 链接,以从应用的输出程序集中剪裁不必要的 IL。在调试配置中生成时,将禁用链接器。应用必须在发布配置中生成才能启用链接器。部署 Blazor WebAssembly 应用时,建议在发布中生成。

链接应用可以优化大小,但可能会造成不利影响。使用反射或相关动态功能的应用可能会在剪裁时中断,因为链接器不知道此动态行为,而且通常无法确定在运行时反射所需的类型。若要剪裁此类应用,必须通知链接器应用所依赖的代码和包或框架中的反射所需的任何类型。

若要确保剪裁后的应用在部署后正常工作,请务必在开发时经常对应用的发行版本进行测试。

可以使用以下 MSBuild 功能配置 Blazor 应用的链接:

使用 MSBuild 属性控制链接Control linking with an MSBuild property

Release 配置中生成应用时,将启用链接。若要对此进行更改,请在项目文件中配置 BlazorWebAssemblyEnableLinking MSBuild 属性:

  1. <PropertyGroup>
  2. <BlazorWebAssemblyEnableLinking>false</BlazorWebAssemblyEnableLinking>
  3. </PropertyGroup>

使用配置文件控制链接Control linking with a configuration file

通过提供 XML 配置文件并在项目文件中将该文件指定为 MSBuild 项,按程序集控制链接:

  1. <ItemGroup>
  2. <BlazorLinkerDescriptor Include="Linker.xml" />
  3. </ItemGroup>

Linker.xml :

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2. <!--
  3. This file specifies which parts of the BCL or Blazor packages must not be
  4. stripped by the IL Linker even if they aren't referenced by user code.
  5. -->
  6. <linker>
  7. <assembly fullname="mscorlib">
  8. <!--
  9. Preserve the methods in WasmRuntime because its methods are called by
  10. JavaScript client-side code to implement timers.
  11. Fixes: https://github.com/dotnet/blazor/issues/239
  12. -->
  13. <type fullname="System.Threading.WasmRuntime" />
  14. </assembly>
  15. <assembly fullname="System.Core">
  16. <!--
  17. System.Linq.Expressions* is required by Json.NET and any
  18. expression.Compile caller. The assembly isn't stripped.
  19. -->
  20. <type fullname="System.Linq.Expressions*" />
  21. </assembly>
  22. <!--
  23. In this example, the app's entry point assembly is listed. The assembly
  24. isn't stripped by the IL Linker.
  25. -->
  26. <assembly fullname="MyCoolBlazorApp" />
  27. </linker>

有关详细信息,请参阅 IL Linker:xml 描述符语法

配置链接器以实现国际化Configure the linker for internationalization

默认情况下,用于 Blazor WebAssembly 应用的 Blazor 链接器配置会去除国际化信息(显式请求的区域设置除外)。删除这些程序集可最大程度地缩减应用的大小。

要控制保留哪些国际化程序集,请在项目文件中设置 <MonoLinkerI18NAssemblies> MSBuild 属性:

  1. <PropertyGroup>
  2. <MonoLinkerI18NAssemblies>{all|none|REGION1,REGION2,...}</MonoLinkerI18NAssemblies>
  3. </PropertyGroup>
区域值Mono 区域程序集
all包含的所有程序集
cjkI18N.CJK.dll
mideastI18N.MidEast.dll
none(默认值)None
otherI18N.Other.dll
rareI18N.Rare.dll
westI18N.West.dll

各个值之间用逗号分隔(例如:mideast,west)。

有关详细信息,请参阅国际化:Pnetlib 国际化框架库(mono/mono GitHub 存储库)