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 (dotnet/runtime
repozytorium GitHub).
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
BlazorKonfiguracja Blazor WebAssembly konsolidatora aplikacji usuwa informacje o internacjonalizacji z wyjątkiem ustawień regionalnych, których jawnie zażądano. 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) |
Brak |
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).