Configurare il linker per ASP.NET Core Blazor
Questo articolo illustra come controllare il linker intermedio (IL) durante la compilazione di un'app Blazor .
Blazor WebAssembly esegue il collegamento del linguaggio intermedio durante una compilazione per ridurre il carico interno non necessario dagli assembly di output dell'app. Il linker è disabilitato durante la compilazione in Configurazione di debug. Le app devono essere compilate nella configurazione release per abilitare il linker. Ti consigliamo di compilare in Release durante la Blazor WebAssembly distribuzione delle app.
Il collegamento di un'app ottimizza le dimensioni, ma può avere effetti negativi. Le app che usano la reflection o le funzionalità dinamiche correlate possono interrompersi quando vengono eliminate perché il linker non conosce questo comportamento dinamico e non può determinare in generale quali tipi sono necessari per la reflection in fase di esecuzione. Per tagliare tali app, il linker deve essere informato su qualsiasi tipo richiesto dalla reflection nel codice e nei pacchetti o framework da cui dipende l'app.
Per assicurarsi che l'app tagliata funzioni correttamente dopo la distribuzione, è importante testare frequentemente le build di rilascio dell'app durante lo sviluppo.
Il collegamento per Blazor le app può essere configurato usando queste funzionalità di MSBuild:
- Configurare il collegamento globale con una proprietà MSBuild.
- Controllare il collegamento per ogni singolo assembly con un file di configurazione.
Controllare il collegamento con una proprietà MSBuild
Il collegamento è abilitato quando un'app è incorporata nella Release
configurazione. Per modificare questa operazione, configurare la BlazorWebAssemblyEnableLinking
proprietà MSBuild nel file di progetto:
<PropertyGroup>
<BlazorWebAssemblyEnableLinking>false</BlazorWebAssemblyEnableLinking>
</PropertyGroup>
Controllare il collegamento con un file di configurazione
Controllare il collegamento per ogni singolo assembly usando un file di configurazione XML e specificando il file come un elemento MSBuild nel file di progetto:
<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>
Per altre informazioni ed esempi, vedere Formati di dati (dotnet/runtime
repository GitHub).
Aggiungere un file di configurazione del linker XML a una libreria
Per configurare il linker per una libreria specifica, aggiungere un file di configurazione del linker XML nella libreria come risorsa incorporata. La risorsa incorporata deve avere lo stesso nome dell'assembly.
Nell'esempio seguente il LinkerConfig.xml
file viene specificato come risorsa incorporata con lo stesso nome dell'assembly della libreria:
<ItemGroup>
<EmbeddedResource Include="LinkerConfig.xml">
<LogicalName>$(MSBuildProjectName).xml</LogicalName>
</EmbeddedResource>
</ItemGroup>
Configurare il linker per l'internazionalizzazione
BlazorLa configurazione del linker per Blazor WebAssembly le app rimuove le informazioni di internazionalizzazione, ad eccezione delle impostazioni locali richieste in modo esplicito. La rimozione di questi assembly riduce al minimo le dimensioni dell'app.
Per controllare quali assembly I18N vengono conservati, impostare la <BlazorWebAssemblyI18NAssemblies>
proprietà MSBuild nel file di progetto:
<PropertyGroup>
<BlazorWebAssemblyI18NAssemblies>{all|none|REGION1,REGION2,...}</BlazorWebAssemblyI18NAssemblies>
</PropertyGroup>
Valore area | Assembly di area mono |
---|---|
all |
Tutti gli assembly inclusi |
cjk |
I18N.CJK.dll |
mideast |
I18N.MidEast.dll |
none (predefinito) |
None |
other |
I18N.Other.dll |
rare |
I18N.Rare.dll |
west |
I18N.West.dll |
Usare una virgola per separare più valori , ad esempio mideast,west
.
Per altre informazioni, vedere I18N: Pnetlib Internationalization Framework Library (repository GitHub mono/mono).