Konfigurowanie konsolidatora dla platformy ASP.NET Core Blazor

W tym artykule wyjaśniono, jak kontrolować konsolidator języka pośredniego (IL) podczas kompilowania Blazor aplikacji.

Blazor WebAssemblywykonuje łączenie języka pośredniego (IL) podczas kompilacji w celu przycinania niepotrzebnego il z zestawów wyjściowych aplikacji. Konsolidator jest wyłączony podczas kompilowania w konfiguracji debugowania. Aplikacje muszą tworzyć konfigurację wydania, aby włączyć konsolidator. Zalecamy kompilowanie Blazor WebAssembly w wersji podczas wdrażania aplikacji.

Łączenie aplikacji optymalizuje rozmiar, ale może mieć szkodliwe skutki. Aplikacje korzystające z odbicia lub powiązanych funkcji dynamicznych mogą ulec awarii po przycięciu, ponieważ konsolidator nie wie o tym zachowaniu dynamicznym i nie może określić, które typy są wymagane do odbicia w czasie wykonywania. Aby przyciąć takie aplikacje, konsolidator musi być poinformowany o wszelkich typach wymaganych przez odbicie w kodzie i w pakietach lub strukturach, od których zależy aplikacja.

Aby upewnić się, że przycięta aplikacja działa prawidłowo po wdrożeniu, ważne jest, aby często testować kompilacje wersji aplikacji podczas opracowywania.

Łączenie aplikacji Blazor można skonfigurować przy użyciu następujących funkcji programu MSBuild:

  • Konfigurowanie łączenia globalnie za pomocą właściwości MSBuild.
  • Kontrolowanie łączenia na podstawie poszczególnych zestawów za pomocą pliku konfiguracji.

Sterowanie łączeniem z właściwością MSBuild

Łączenie jest włączone, gdy aplikacja jest wbudowana w Release konfigurację. Aby to zmienić, skonfiguruj BlazorWebAssemblyEnableLinking właściwość MSBuild w pliku projektu:

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

Sterowanie łączeniem z plikiem konfiguracji

Kontrolowanie łączenia dla poszczególnych zestawów przez udostępnienie pliku konfiguracji XML i określenie pliku jako elementu MSBuild w pliku 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>

Aby uzyskać więcej informacji i przykładów, zobacz Formaty danych (repozytorium GitHub dotnet/linker).

Dodawanie pliku konfiguracji konsolidatora XML do biblioteki

Aby skonfigurować konsolidator dla określonej biblioteki, dodaj plik konfiguracji konsolidatora XML do biblioteki jako zasób osadzony. Zasób osadzony musi mieć taką samą nazwę jak zestaw.

W poniższym przykładzie LinkerConfig.xml plik jest określany jako zasób osadzony o takiej samej nazwie jak zestaw biblioteki:

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

Konfigurowanie konsolidatora pod kątem internacjonalizacji

Domyślnie Blazorkonfiguracja konsolidatora dla Blazor WebAssembly aplikacji usuwa informacje o internacjonalizacji, z wyjątkiem ustawień regionalnych jawnie żądanych. Usunięcie tych zestawów minimalizuje rozmiar aplikacji.

Aby kontrolować, które zestawy I18N są zachowywane, ustaw <BlazorWebAssemblyI18NAssemblies> właściwość MSBuild w pliku projektu:

<PropertyGroup>
  <BlazorWebAssemblyI18NAssemblies>{all|none|REGION1,REGION2,...}</BlazorWebAssemblyI18NAssemblies>
</PropertyGroup>
Wartość regionu Zestaw regionów mono
all Wszystkie zestawy dołączone
cjk I18N.CJK.dll
mideast I18N.MidEast.dll
none (domyślne) None
other I18N.Other.dll
rare I18N.Rare.dll
west I18N.West.dll

Użyj przecinka, aby oddzielić wiele wartości (na przykład mideast,west).

Aby uzyskać więcej informacji, zobacz I18N: Pnetlib Internationalization Framework Library (mono/mono GitHub repository).

Dodatkowe zasoby