Настройка компоновщика для ASP.NET Core Blazor
В этой статье вы узнаете, как управлять компоновщиком для промежуточного языка (IL) при создании приложения Blazor.'
Blazor WebAssembly выполняет компоновку промежуточного языка (IL) во время сборки, чтобы затем удалить ненужный IL из выходных сборок приложения. Компоновщик отключен при сборке в конфигурации отладки. Для включения компоновщика приложения должны быть построены в конфигурации выпуска. Мы рекомендуем создавать выпуск при развертывании приложений Blazor WebAssembly.
Компоновка приложения оптимизируется в зависимости от размера, но это может иметь негативные последствия. Приложения, использующие отражение или связанные динамические функции, могут прерываться при обрезке, так как компоновщик не знает об этом динамическом поведении и не может определить общие типы, необходимые для отражения во время выполнения. Чтобы обрезать такие приложения, компоновщик должен быть уведомлен о любых типах, необходимых для отражения в коде и в пакетах или платформах, от которых зависит приложение.
Чтобы обеспечить правильную работу обрезанного приложения после его развертывания, важно часто тестировать сборки выпуска приложения при разработке.
Компоновку приложений Blazor можно настроить с помощью следующих функций MSBuild:
- настройка компоновки глобально с помощью свойства MSBuild;
- управлять компоновкой каждой сборки с помощью файла конфигурации.
Управление компоновкой с помощью свойства MSBuild
Компоновка включается, когда приложение собирается в конфигурации Release
. Чтобы изменить это поведение, настройте свойство MSBuild BlazorWebAssemblyEnableLinking
в файле проекта:
<PropertyGroup>
<BlazorWebAssemblyEnableLinking>false</BlazorWebAssemblyEnableLinking>
</PropertyGroup>
Управление компоновкой с помощью файла конфигурации
Чтобы управлять компоновкой каждой сборки, нужно предоставить XML-файл конфигурации и указать его как элемент MSBuild в файле проекта.
<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>
Дополнительные сведения и примеры см. в разделе "Форматы данных" (dotnet/runtime
репозиторий GitHub).
Добавление файла конфигурации компоновщика XML в библиотеку
Чтобы настроить компоновщик для определенной библиотеки, добавьте файл конфигурации компоновщика XML в библиотеку в качестве внедренного ресурса. Имя внедренного ресурса должно совпадать с именем сборки.
В следующем примере файл LinkerConfig.xml
указан как внедренный ресурс, имя которого совпадает с именем сборки библиотеки.
<ItemGroup>
<EmbeddedResource Include="LinkerConfig.xml">
<LogicalName>$(MSBuildProjectName).xml</LogicalName>
</EmbeddedResource>
</ItemGroup>
Настройка компоновщика для интернационализации
BlazorКонфигурация компоновщика для Blazor WebAssembly приложений удаляет сведения о интернационализации, за исключением языковых стандартов, явно запрошенных. Удаление этих сборок уменьшает размер приложения.
Чтобы указать, какие сборки I18N необходимо оставить, задайте свойство MSBuild <BlazorWebAssemblyI18NAssemblies>
в файле проекта:
<PropertyGroup>
<BlazorWebAssemblyI18NAssemblies>{all|none|REGION1,REGION2,...}</BlazorWebAssemblyI18NAssemblies>
</PropertyGroup>
Значение региона | Сборка для одного региона |
---|---|
all |
Включены все сборки |
cjk |
I18N.CJK.dll |
mideast |
I18N.MidEast.dll |
none (по умолчанию) |
нет |
other |
I18N.Other.dll |
rare |
I18N.Rare.dll |
west |
I18N.West.dll |
Для разделения нескольких значений используйте запятую (например, mideast,west
).
Дополнительные сведения см. в статье I18N: библиотека платформы internationalization Framework Pnetlib (репозиторий mono/mono GitHub).
Дополнительные ресурсы
ASP.NET Core