ASP.NET Core Blazor 用のリンカーを構成するConfigure the Linker for ASP.NET Core Blazor

Blazor WebAssembly では、ビルド中に中間言語 (IL) のリンクが実行されて、アプリの出力アセンブリから不要な IL がトリミングされます。Blazor WebAssembly performs Intermediate Language (IL) linking during a build to trim unnecessary IL from the app's output assemblies. デバッグ構成でビルドすると、リンカーは無効になります。The linker is disabled when building in Debug configuration. リンカーを有効にするには、アプリをリリース構成でビルドする必要があります。Apps must build in Release configuration to enable the linker. Blazor WebAssembly アプリを配置する場合は、リリースでビルドすることをお勧めします。We recommend building in Release when deploying your Blazor WebAssembly apps.

アプリをリンクするとサイズが最適化されますが、悪影響を及ぼす可能性があります。Linking an app optimizes for size but may have detrimental effects. リフレクションや関連する動的機能を使用するアプリは、トリミングされたときに中断する可能性があります。リンカーがこの動的な動作を認識せず、通常は実行時にリフレクションに必要な型を特定できないためです。Apps that use reflection or related dynamic features may break when trimmed because the linker doesn't know about this dynamic behavior and can't determine in general which types are required for reflection at runtime. そのようなアプリをトリミングするには、コードと、アプリが依存しているパッケージまたはフレームワークのリフレクションで必要なすべての型を、リンカーに通知する必要があります。To trim such apps, the linker must be informed about any types required by reflection in the code and in packages or frameworks that the app depends on.

トリミングされたアプリが配置後に正しく動作するには、開発中にアプリのリリース ビルドを頻繁にテストすることが重要です。To ensure the trimmed app works correctly once deployed, it's important to test Release builds of the app frequently while developing.

Blazor アプリのリンクは、次の MSBuild 機能を使用して構成できます。Linking for Blazor apps can be configured using these MSBuild features:

MSBuild プロパティを使ってリンクを制御するControl linking with an MSBuild property

リンクは、アプリが Release 構成でビルドされると有効になります。Linking is enabled when an app is built in Release configuration. これを変更するには、プロジェクト ファイルで BlazorWebAssemblyEnableLinking の MSBuild プロパティを構成します。To change this, configure the BlazorWebAssemblyEnableLinking MSBuild property in the project file:

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

構成ファイルを使ってリンクを制御するControl linking with a configuration file

XML の構成ファイルを用意してそのファイルをプロジェクト ファイル内で MSBuild 項目として指定することで、アセンブリごとにリンクを制御します。Control linking on a per-assembly basis by providing an XML configuration file and specifying the file as a MSBuild item in the project file:

<ItemGroup>
  <BlazorLinkerDescriptor Include="LinkerConfig.xml" />
</ItemGroup>

LinkerConfig.xml: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>

詳細と例については、データ形式 (mono/linker GitHub リポジトリ) を参照してください。For more information and examples, see Data Formats (mono/linker GitHub repository).

XML リンカー構成ファイルをライブラリに追加するAdd an XML linker configuration file to a library

特定のライブラリ用にリンカーを構成するには、XML リンカー構成ファイルを埋め込みリソースとしてライブラリに追加します。To configure the linker for a specific library, add an XML linker configuration file into the library as an embedded resource. 埋め込みリソースの名前は、アセンブリと同じにする必要があります。The embedded resource must have the same name as the assembly.

次の例では、LinkerConfig.xml ファイルが、ライブラリのアセンブリと同じ名前を持つ埋め込みリソースとして指定されています。In the following example, the LinkerConfig.xml file is specified as an embedded resource that has the same name as the library's assembly:

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

国際化用にリンカーを構成するConfigure the linker for internationalization

既定では、Blazor WebAssembly アプリに対する Blazor のリンカー構成により、明示的に要求されたロケールを除き、国際化情報は除去されます。By default, Blazor's linker configuration for Blazor WebAssembly apps strips out internationalization information except for locales explicitly requested. これらのアセンブリを削除すると、アプリのサイズが最小限に抑えられます。Removing these assemblies minimizes the app's size.

保持される I18N アセンブリを制御するには、プロジェクト ファイルで MSBuild のプロパティ <BlazorWebAssemblyI18NAssemblies> を設定します。To control which I18N assemblies are retained, set the <BlazorWebAssemblyI18NAssemblies> MSBuild property in the project file:

<PropertyGroup>
  <BlazorWebAssemblyI18NAssemblies>{all|none|REGION1,REGION2,...}</BlazorWebAssemblyI18NAssemblies>
</PropertyGroup>
リージョンの値Region Value Mono のリージョン アセンブリMono region assembly
all すべてのアセンブリが含まれますAll assemblies included
cjk I18N.CJK.dll
mideast I18N.MidEast.dll
none (既定値)none (default) NoneNone
other I18N.Other.dll
rare I18N.Rare.dll
west I18N.West.dll

複数の値を区切るにはコンマを使用します (例: mideast,west)。Use a comma to separate multiple values (for example, mideast,west).

詳しくは、「I18N: Pnetlib 国際化フレームワーク ライブラリ (mono/mono GitHub リポジトリ)」をご覧ください。For more information, see I18N: Pnetlib Internationalization Framework Library (mono/mono GitHub repository).

その他の技術情報Additional resources