Konfigurieren des Linkers für ASP.NET Core Blazor
In diesem Artikel wird erläutert, wie Sie den IL-Linker (Intermediate Language, Zwischensprache) beim Erstellen einer Blazor-App steuern.
Blazor WebAssembly führt bei einem Build eine IL-Verknüpfung durch, um nicht benötigte Zwischensprache aus den Ausgabeassemblys der App zu kürzen. Der Linker ist beim Buildvorgang in der Debugkonfiguration deaktiviert. Apps müssen in der Releasekonfiguration erstellt werden, damit der Linker aktiviert wird. Sie sollten die Releasekonfiguration beim Buildvorgang anwenden, wenn Sie Blazor WebAssembly-Apps erstellen.
Das Verknüpfen einer App optimiert die Größe, kann jedoch auch negative Auswirkungen haben. Apps, die Reflexion oder ähnliche dynamische Features verwenden, können beim Kürzen unterbrochen werden, da der Linker dieses dynamische Verhalten nicht kennt und nicht ermitteln kann, welche Typen für die Reflexion zur Laufzeit erforderlich sind. Zur Kürzung solcher Apps muss der Linker über alle Typen informiert werden, die für die Reflektion im Code und in Paketen oder Frameworks erforderlich sind, von denen die App abhängig ist.
Wenn Sie sicherstellen möchten, dass die gekürzte App nach der Bereitstellung ordnungsgemäß funktioniert, ist es wichtig, bei der Entwicklung häufig die Releasebuilds der App zu testen.
Das Verknüpfen von Blazor-Apps kann mithilfe der folgenden MSBuild-Funktionen konfiguriert werden:
- Globales Konfigurieren der Verknüpfung mit einer MSBuild-Eigenschaft
- Steuern der Verknüpfung für unterschiedliche Assemblys mit einer Konfigurationsdatei
Steuern der Verknüpfung mit einer MSBuild-Eigenschaft
Die Verknüpfung wird aktiviert, wenn eine App in der Release
-Konfiguration erstellt wird. Sie können dieses Verhalten ändern, indem Sie die MSBuild-Eigenschaft BlazorWebAssemblyEnableLinking
in der Projektdatei konfigurieren:
<PropertyGroup>
<BlazorWebAssemblyEnableLinking>false</BlazorWebAssemblyEnableLinking>
</PropertyGroup>
Steuern der Verknüpfung mit einer Konfigurationsdatei.
Sie können die Verknüpfung für unterschiedliche Assemblys steuern, indem Sie eine XML-Konfigurationsdatei bereitstellen und die Datei als MSBuild-Element in der Projektdatei festlegen:
<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>
Weitere Informationen und Beispiele finden Sie unter Data Formats ( GitHub-Repository).For more information and examples, see Data Formats (dotnet/runtime
GitHub repository).
Hinzufügen einer XML-Linkerkonfigurationsdatei zu einer Bibliothek
Fügen Sie eine XML-Linkerkonfigurationsdatei als eingebettete Ressource zur Bibliothek hinzu, um den Linker für eine spezifische Bibliothek zu konfigurieren. Die eingebettete Ressource muss denselben Namen wie die Assembly aufweisen.
Im folgenden Beispiel wird die Datei LinkerConfig.xml
als eingebettete Ressource festgelegt, die denselben Namen wie die Assembly der Bibliothek aufweist:
<ItemGroup>
<EmbeddedResource Include="LinkerConfig.xml">
<LogicalName>$(MSBuildProjectName).xml</LogicalName>
</EmbeddedResource>
</ItemGroup>
Konfigurieren des Linkers für die Internationalisierung
Die Linker-Konfiguration von Blazor für Blazor WebAssembly-Apps entfernt Internationalisierungsinformationen, außer für explizit angeforderte Gebietsschemata. Durch die Entfernung dieser Assemblys wird die Größe der App minimiert.
Legen Sie die MSBuild-Eigenschaft <BlazorWebAssemblyI18NAssemblies>
in der Projektdatei fest, um zu steuern, welche I18N-Assemblys beibehalten werden:
<PropertyGroup>
<BlazorWebAssemblyI18NAssemblies>{all|none|REGION1,REGION2,...}</BlazorWebAssemblyI18NAssemblies>
</PropertyGroup>
Regionswert | Mono-Regionsassembly |
---|---|
all |
Alle Assemblys sind enthalten |
cjk |
I18N.CJK.dll |
mideast |
I18N.MidEast.dll |
none (Standardwert) |
Keine |
other |
I18N.Other.dll |
rare |
I18N.Rare.dll |
west |
I18N.West.dll |
Verwenden Sie ein Komma, um mehrere Werte voneinander zu trennen (z. B. mideast,west
).
Weitere Informationen finden Sie unter I18N: Pnetlib-Framework-Bibliothek für die Internationalisierung (Mono/Mono-Github-Repository).