Mengonfigurasi Linker untuk ASP.NET Core Blazor

Artikel ini menjelaskan cara mengontrol Intermediate Language (IL) Linker saat membuat Blazor aplikasi.

Blazor WebAssemblymelakukan penautan Bahasa Perantara (IL) selama build untuk memangkas IL yang tidak perlu dari rakitan output aplikasi. Linker dinonaktifkan saat membangun dalam konfigurasi Debug. Aplikasi harus dibuat dalam Konfigurasi rilis untuk mengaktifkan linker. Sebaiknya buat di Rilis saat menyebarkan aplikasi Anda Blazor WebAssembly .

Menautkan aplikasi mengoptimalkan ukuran tetapi mungkin memiliki efek yang merugikan. Aplikasi yang menggunakan refleksi atau fitur dinamis terkait dapat rusak saat dipangkas karena linker tidak tahu tentang perilaku dinamis ini dan tidak dapat menentukan secara umum jenis mana yang diperlukan untuk refleksi saat runtime. Untuk memangkas aplikasi tersebut, linker harus diberi tahu tentang jenis apa pun yang diperlukan oleh refleksi dalam kode dan dalam paket atau kerangka kerja yang bergantung pada aplikasi.

Untuk memastikan aplikasi yang dipangkas berfungsi dengan benar setelah disebarkan, penting untuk sering menguji Build rilis aplikasi saat mengembangkan.

Penautan untuk Blazor aplikasi dapat dikonfigurasi menggunakan fitur MSBuild ini:

  • Konfigurasikan penautan secara global dengan properti MSBuild.
  • Mengontrol penautan per rakitan dengan file konfigurasi.

Mengontrol penautan dengan properti MSBuild

Penautan diaktifkan saat aplikasi dibangun dalam Release konfigurasi. Untuk mengubah ini, konfigurasikan BlazorWebAssemblyEnableLinking properti MSBuild dalam file proyek:

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

Mengontrol penautan dengan file konfigurasi

Kontrol penautan per rakitan dengan menyediakan file konfigurasi XML dan menentukan file sebagai item MSBuild dalam file proyek:

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

Untuk informasi dan contoh selengkapnya, lihat Format Data (repositori GitHub dotnet/linker).

Menambahkan file konfigurasi linker XML ke pustaka

Untuk mengonfigurasi linker untuk pustaka tertentu, tambahkan file konfigurasi linker XML ke pustaka sebagai sumber daya yang disematkan. Sumber daya yang disematkan harus memiliki nama yang sama dengan rakitan.

Dalam contoh berikut, LinkerConfig.xml file ditentukan sebagai sumber daya tersemat yang memiliki nama yang sama dengan rakitan pustaka:

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

Mengonfigurasi linker untuk internasionalisasi

Secara default, Blazorkonfigurasi linker untuk Blazor WebAssembly aplikasi menghapus informasi internasionalisasi kecuali untuk lokal yang diminta secara eksplisit. Menghapus rakitan ini meminimalkan ukuran aplikasi.

Untuk mengontrol rakitan I18N mana yang dipertahankan, atur <BlazorWebAssemblyI18NAssemblies> properti MSBuild dalam file proyek:

<PropertyGroup>
  <BlazorWebAssemblyI18NAssemblies>{all|none|REGION1,REGION2,...}</BlazorWebAssemblyI18NAssemblies>
</PropertyGroup>
Nilai Wilayah Rakitan wilayah mono
all Semua rakitan disertakan
cjk I18N.CJK.dll
mideast I18N.MidEast.dll
none (default) Tidak ada
other I18N.Other.dll
rare I18N.Rare.dll
west I18N.West.dll

Gunakan koma untuk memisahkan beberapa nilai (misalnya, mideast,west).

Untuk informasi selengkapnya, lihat I18N: Pustaka Kerangka Kerja Internasionalisasi Pnetlib (repositori GitHub mono/mono).

Sumber Daya Tambahan: