Konfigurace linkeru pro ASP.NET Core Blazor

Tento článek vysvětluje, jak při vytváření Blazor aplikace řídit linker jazyka IL (Intermediate Language).

Blazor WebAssemblyprovádí propojení zprostředkujícího jazyka (IL) během sestavení a ořízne nepotřebné il ze výstupních sestavení aplikace. Linker je při sestavování v konfiguraci ladění zakázán. Aplikace se musí sestavit v konfiguraci vydané verze, aby bylo možné linker povolit. Při nasazování aplikací Blazor WebAssembly doporučujeme sestavovat ve verzi.

Propojení aplikace optimalizuje velikost, ale může mít škodlivé účinky. Aplikace, které používají reflexi nebo související dynamické funkce, se můžou při oříznutí přerušit, protože linker o tomto dynamickém chování neví a nedokáže obecně určit, které typy jsou potřeba pro reflexi za běhu. Aby bylo možné takové aplikace oříznout, musí být linker informován o všech typech požadovaných reflexí v kódu a v balíčcích nebo architekturách, na které aplikace závisí.

Pokud chcete zajistit, aby oříznutá aplikace po nasazení správně fungovala, je důležité při vývoji často testovat buildy vydané verze aplikace.

Propojení aplikací Blazor je možné nakonfigurovat pomocí těchto funkcí NÁSTROJE MSBuild:

  • Konfigurace globálního propojení s vlastností MSBuild
  • Řízení propojení na základě sestavení s konfiguračním souborem

Propojení ovládacích prvků s vlastností MSBuild

Propojení je povolené, když je aplikace integrovaná v Release konfiguraci. Chcete-li toto nastavení změnit, nakonfigurujte BlazorWebAssemblyEnableLinking vlastnost MSBuild v souboru projektu:

<PropertyGroup>
  <BlazorWebAssemblyEnableLinking>false</BlazorWebAssemblyEnableLinking>
</PropertyGroup>

Řízení propojení s konfiguračním souborem

Řízení propojení na základě sestavení poskytnutím konfiguračního souboru XML a určením souboru jako položky NÁSTROJE MSBuild v souboru projektu:

<ItemGroup>
  <BlazorLinkerDescriptor Include="LinkerConfig.xml" />
</ItemGroup>

LinkerConfig.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!--
  This file specifies which parts of the BCL or Blazor packages must not be
  stripped by the IL Linker even if they aren't referenced by user code.
-->
<linker>
  <assembly fullname="mscorlib">
    <!--
      Preserve the methods in WasmRuntime because its methods are called by 
      JavaScript client-side code to implement timers.
      Fixes: https://github.com/dotnet/blazor/issues/239
    -->
    <type fullname="System.Threading.WasmRuntime" />
  </assembly>
  <assembly fullname="System.Core">
    <!--
      System.Linq.Expressions* is required by Json.NET and any 
      expression.Compile caller. The assembly isn't stripped.
    -->
    <type fullname="System.Linq.Expressions*" />
  </assembly>
  <!--
    In this example, the app's entry point assembly is listed. The assembly
    isn't stripped by the IL Linker.
  -->
  <assembly fullname="MyCoolBlazorApp" />
</linker>

Další informace a příklady najdete v tématu Formáty dat (dotnet/runtime úložiště GitHub).

Přidání konfiguračního souboru linkeru XML do knihovny

Pokud chcete nakonfigurovat linker pro konkrétní knihovnu, přidejte do knihovny konfigurační soubor linkeru XML jako vložený prostředek. Vložený prostředek musí mít stejný název jako sestavení.

V následujícím příkladu LinkerConfig.xml je soubor zadán jako vložený prostředek, který má stejný název jako sestavení knihovny:

<ItemGroup>
  <EmbeddedResource Include="LinkerConfig.xml">
    <LogicalName>$(MSBuildProjectName).xml</LogicalName>
  </EmbeddedResource>
</ItemGroup>

Konfigurace linkeru pro internacionalizaci

BlazorKonfigurace linkeru pro Blazor WebAssembly aplikace odstraní informace o internacionalizaci s výjimkou národních prostředí explicitně požadovaných národních prostředí. Odebrání těchto sestavení minimalizuje velikost aplikace.

Chcete-li řídit, která sestavení I18N jsou zachována, nastavte <BlazorWebAssemblyI18NAssemblies> vlastnost MSBuild v souboru projektu:

<PropertyGroup>
  <BlazorWebAssemblyI18NAssemblies>{all|none|REGION1,REGION2,...}</BlazorWebAssemblyI18NAssemblies>
</PropertyGroup>
Hodnota oblasti Sestavení monoregionu
all Všechna sestavení zahrnutá
cjk I18N.CJK.dll
mideast I18N.MidEast.dll
none (výchozí) Nic
other I18N.Other.dll
rare I18N.Rare.dll
west I18N.West.dll

K oddělení více hodnot (například mideast,west) použijte čárku.

Další informace najdete v tématu I18N: Pnetlib Internationalization Framework Library (mono/mono úložiště GitHub).

Další materiály