Dela via


Konfigurera Linker för ASP.NET Core Blazor

Den här artikeln beskriver hur du styr IL-länkaren (Intermediate Language) för scenarier på klientsidan när du skapar en Blazor app.

Blazor WebAssembly utför länkning av mellanliggande språk (IL) under en version för att trimma onödiga IL från appens utdatasammansättningar. Länkaren inaktiveras när du skapar i felsökningskonfigurationen. Appar måste byggas i frisläppningskonfiguration för att aktivera länkaren. Vi rekommenderar att du skapar i Release när du distribuerar dina Blazor WebAssembly appar.

Länkning av en app optimeras för storlek men kan ha skadliga effekter. Appar som använder reflektiva funktioner eller relaterade dynamiska funktioner kan sluta fungera när de trimmas eftersom länkaren inte känner till det här dynamiska beteendet och inte kan avgöra generellt vilka typer som krävs för reflektion vid körning. För att trimma sådana appar måste länkaren ha information om alla typer som krävs för reflektioner i koden och i paket eller ramverk som appen använder.

För att säkerställa att den trimmade appen fungerar korrekt när den har distribuerats är det viktigt att ofta testa appens release-versioner under utvecklingen.

Länkning för Blazor appar kan konfigureras med hjälp av dessa MSBuild-funktioner:

Kontrolllänkning med en MSBuild-egenskap

Som standard aktiveras länkning när en app är inbyggd i Release konfigurationen. Om du vill inaktivera länkning konfigurerar du BlazorWebAssemblyEnableLinking egenskapen MSBuild i projektfilen:

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

Kontrolllänkning med en konfigurationsfil

Kontrollera länkning per sammansättning genom att ange en XML-konfigurationsfil och ange filen som ett MSBuild-objekt i projektfilen:

<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>

Mer information och exempel finns i Dataformat (dotnet/runtime GitHub-lagringsplats).

Lägga till en XML-länkningskonfigurationsfil i ett bibliotek

Om du vill konfigurera länkaren för ett specifikt bibliotek lägger du till en XML-länkkonfigurationsfil i biblioteket som en inbäddad resurs. Den inbäddade resursen måste ha samma namn som sammansättningen.

I följande exempel LinkerConfig.xml anges filen som en inbäddad resurs som har samma namn som bibliotekets sammansättning:

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

Konfigurera länkaren för internationalisering

Blazor:s länkkonfiguration för Blazor WebAssembly-appar tar bort internationaliseringsinformation, utom för de lokaler som uttryckligen begärts. Om du tar bort dessa sammansättningar minimeras appens storlek.

Om du vill styra vilka I18N-sammansättningar som ska behållas anger du <BlazorWebAssemblyI18NAssemblies> egenskapen MSBuild i projektfilen:

<PropertyGroup>
  <BlazorWebAssemblyI18NAssemblies>{all|none|REGION1,REGION2,...}</BlazorWebAssemblyI18NAssemblies>
</PropertyGroup>
Regionvärde Mono-regionförsamling
all Alla sammansättningar ingår
cjk I18N.CJK.dll
mideast I18N.MidEast.dll
none (standardinställning) None
other I18N.Other.dll
rare I18N.Rare.dll
west I18N.West.dll

Använd ett kommatecken för att separera flera värden (till exempel mideast,west).

Mer information finns i I18N: Pnetlib Internationalization Framework Library (mono/mono GitHub-lagringsplats).

Ytterligare resurser