自己完結型の展開と実行可能ファイルのトリミングTrim self-contained deployments and executables

自己完結型アプリケーションを公開する場合、.NET Core ランタイムにはアプリケーションもバンドルされます。When publishing an application self-contained, the .NET Core runtime is bundled together with the application. このバンドルにより、パッケージ アプリケーションに大量のコンテンツが追加されます。This bundling adds a significant amount of content to your packaged application. アプリケーションの展開では、多くの場合、サイズが重要な要素になります。When it comes to deploying your application, size is often an important factor. 通常は、パッケージ アプリケーションのサイズをなるべく小さく保つことが、アプリケーション開発者の目標となります。Keeping the size of the package application as small as possible is typically a goal for application developers.

アプリケーションの複雑さによっては、アプリケーションの実行にランタイムのサブセットだけが必要となります。Depending on the complexity of the application, only a subset of the runtime is required to run the application. このようなランタイムの未使用部分は不要であり、パッケージ化されたアプリケーションから削除することができます。These unused parts of the runtime are unnecessary and can be trimmed from the packaged application.

トリミング機能は、アプリケーション バイナリを調べて、必要なランタイム アセンブリのグラフを検出し、構築することで機能します。The trimming feature works by examining the application binaries to discover and build a graph of the required runtime assemblies. 参照されていないその他のランタイム アセンブリは除外されます。The remaining runtime assemblies that aren't referenced are excluded.

注意

トリミングは .NET Core 3.1 の実験的な機能であり、自己完結型で公開されるアプリケーションで_のみ_使用できます。Trimming is an experimental feature in .NET Core 3.1 and is only available to applications that are published self-contained.

アセンブリがトリミングされないようにするPrevent assemblies from being trimmed

トリミング機能が参照の検出に失敗するシナリオがあります。There are scenarios in which the trimming functionality will fail to detect references. たとえば、アプリケーションまたはアプリケーションによって参照されるライブラリから、ランタイム アセンブリに対してリフレクションが使用されている場合、アセンブリは直接参照されません。For example, when reflection is used on a runtime assembly, either by your application or a library that is referenced by your application, the assembly isn't directly referenced. このような間接参照はトリミングに認識されず、ライブラリは発行フォルダーから除外されます。Trimming is unaware of these indirect references and would exclude the library from the published folder.

コードからリフレクションを介して間接的にアセンブリを参照している場合は、<TrimmerRootAssembly> 設定を使用してアセンブリがトリミングされないようにすることができます。When the code is indirectly referencing an assembly through reflection, you can prevent the assembly from being trimmed with the <TrimmerRootAssembly> setting. 次の例は、System.Security アセンブリという名前のアセンブリがトリミングされないようにする方法を示しています。The following example shows how to prevent an assembly called System.Security assembly from being trimmed:

<ItemGroup>
    <TrimmerRootAssembly Include="System.Security" />
</ItemGroup>

アプリをトリミングする - CLITrim your app - CLI

dotnet publish コマンドを使用してアプリケーションをトリミングします。Trim your application using the dotnet publish command. アプリを発行するときは、次の 3 つの設定を設定します。When you publish your app, set the following three settings:

  • 自己完結型として発行する: --self-contained truePublish as self-contained: --self-contained true
  • 単一ファイルの発行を無効にする: -p:PublishSingleFile=falseDisable single-file publishing: -p:PublishSingleFile=false
  • トリミングを有効にする: p:PublishTrimmed=trueEnable trimming: p:PublishTrimmed=true

次の例では、Windows 10 用のアプリを自己完結型として発行し、出力をトリミングします。The following example publishes an app for Windows 10 as self-contained and trims the output.

dotnet publish -c Release -r win10-x64 --self-contained true -p:PublishSingleFile=false -p:PublishTrimmed=true

詳細については、「.NET Core CLI を使用して .NET Core アプリを発行する」を参照してください。For more information, see Publish .NET Core apps with .NET Core CLI.

アプリをトリミングする - Visual StudioTrim your app - Visual Studio

Visual Studio を使用すると、アプリケーションの発行方法を制御する再利用可能な発行プロファイルを作成できます。Visual Studio creates reusable publishing profiles that control how your application is published.

  1. [ソリューション エクスプローラー] ペインで、発行するプロジェクトを右クリックします。On the Solution Explorer pane, right-click on the project you want to publish. [発行] を選択します。Select Publish....

    右クリック メニューの [発行] オプションが強調表示されたソリューション エクスプローラー。

    発行プロファイルがまだない場合は、指示に従って作成し、ターゲットの種類として [フォルダー] を選択します。If you don't already have a publishing profile, follow the instructions to create one and choose the Folder target-type.

  2. [編集] を選択します。Choose Edit.

    Visual Studio の発行プロファイルと [編集] ボタン

  3. [プロファイル設定] ダイアログで、次のオプションを設定します。In the Profile settings dialog, set the following options:

    • [配置モード][自己完結] に設定します。Set Deployment mode to Self-contained.
    • [ターゲット ランタイム] を発行先のプラットフォームに設定します。Set Target runtime to the platform you want to publish to.
    • [未使用のアセンブリをトリミングする (プレビュー)] を選択します。Select Trim unused assemblies (in preview).

    [保存] を選択して設定を保存し、 [発行] ダイアログに戻ります。Choose Save to save the settings and return to the Publish dialog.

    [配置モード]、[ターゲット ランタイム]、[未使用のアセンブリをトリミングする] オプションが強調表示されている [プロファイル設定] ダイアログ。

  4. [発行] を選択してトリミングされたアプリを発行します。Choose Publish to publish your app trimmed.

詳細については、Visual Studio を使用した .NET Core アプリの発行に関するページを参照してください。For more information, see Publish .NET Core apps with Visual Studio.

アプリをトリミングする - Visual Studio for MacTrim your app - Visual Studio for Mac

Visual Studio for Mac には、発行時にアプリをトリミングするオプションがありません。Visual Studio for Mac doesn't provide options to trim your app during publish. アプリをトリミングする - CLI」セクションの手順に従って手動で発行する必要があります。You'll need to publish manually by following the instructions from the Trim your app - CLI section. 詳細については、「.NET Core CLI を使用して .NET Core アプリを発行する」を参照してください。For more information, see Publish .NET Core apps with .NET Core CLI.

関連項目See also