トリミングのオプション

この記事で説明する MSBuild のプロパティと項目は、 トリミングされた自己完結型の展開の動作に影響します。 一部のオプションで示されている ILLink は、トリミングが実装されている、基になるツールの名前です。 基になるツールの詳細については、トリマーのドキュメントに関するページを参照してください。

PublishTrimmed によるトリミングは、.NET Core 3.0 で導入されました。 その他のオプションは、.NET 5 以降のバージョンで使用できます。

トリミングを有効にする

  • <PublishTrimmed>true</PublishTrimmed>

    発行時のトリミングを有効にします。 また、この設定により、トリムと互換性のない機能がオフになり、ビルド中に trim 分析 が有効になります。 .NET 8 以降のアプリでは、この設定により、構成バインドと要求デリゲート ソース ジェネレーターも有効になります。

コマンド ラインからトリミングを有効に指定すると、デバッグ エクスペリエンスが異なり、最終製品で追加のバグが発生する可能性があります。

この設定をプロジェクト ファイルに配置して、設定が dotnet build のみでなく、dotnet publish 時にも適用されるようにします。

この設定によってトリミング互換の Roslyn アナライザーも有効になり、トリミングと互換性のない機能は無効になります。

Roslyn アナライザー

.NET 6 以降で PublishTrimmed を設定すると、limited 一連の分析警告を示す Roslyn アナライザーも有効になります。 また、アナライザーは、PublishTrimmed とは別に有効または無効にできます。

  • <EnableTrimAnalyzer>true</EnableTrimAnalyzer>

    トリム分析の警告のサブセットに対して Roslyn アナライザーを有効にします。

警告を表示しない

NoWarnWarningsAsErrorsWarningsNotAsErrors など、ツールチェーンによって適用される通常の MSBuild プロパティを使用して、個々のTreatWarningsAsErrorsを抑制できます。 ILLink のエラーとしての警告動作を個別に制御する追加のオプションがあります。

  • <ILLinkTreatWarningsAsErrors>false</ILLinkTreatWarningsAsErrors>

    ILLink の警告をエラーとして扱いません。 これは、コンパイラの警告をエラーとしてグローバルに扱うときに、トリミング分析の警告をエラーに変えないようにする場合に役立ちます。

詳細な警告の表示

.NET 6 以降では、トリム分析では、PackageReference から取得されたアセンブリごとに最大 1 つの警告が生成され、アセンブリの内部がトリミングと互換性ないことを示します。 すべてのアセンブリの個別の警告を表示することもできます。

  • <TrimmerSingleWarn>false</TrimmerSingleWarn>

    アセンブリごとに 1 つの警告に折りたたむのではなく、すべての詳細な警告を表示します。

シンボルの削除

通常、シンボルは、トリミングされたアセンブリと一致するようにトリミングされます。 すべてのシンボルを削除することもできます。

  • <TrimmerRemoveSymbols>true</TrimmerRemoveSymbols>

    埋め込み PDB や別の PDB ファイルなど、トリミングされたアプリケーションからシンボルを削除します。 これは、アプリケーションのコードと、シンボルに付属するすべての依存関係の両方に適用されます。

また、SDK では、DebuggerSupport プロパティを使用してデバッガーのサポートを無効にすることもできます。 デバッガーのサポートを無効にすると、トリミングによってシンボルが自動的に削除されます (TrimmerRemoveSymbols は既定で true になります)。

フレームワーク ライブラリの機能をトリミングする

フレームワーク ライブラリのいくつかの機能領域には、トリマー ディレクティブが付属しています。これにより、無効な機能のコードを削除できます。

MSBuild のプロパティ 説明
AutoreleasePoolSupport falseに設定すると、サポートされているプラットフォームでautorelease プールを作成するコードが削除されます。 false は、.NET SDK の既定値です。
DebuggerSupport falseに設定すると、デバッグ エクスペリエンスを向上させるコードが削除されます。 この設定では、シンボルも削除されます
EnableUnsafeBinaryFormatterSerialization falseに設定すると、BinaryFormatter シリアル化のサポートが削除されます。 詳細については、「BinaryFormatter シリアル化メソッドは廃止されていますIn-box BinaryFormatter の実装は削除され、常にスローされるを参照してください。
EnableUnsafeUTF7Encoding falseに設定すると、安全でない UTF-7 エンコード コードが削除されます。 詳細については、「UTF-7 コード パスが古い形式に」を参照してください。
EventSourceSupport falseに設定すると、EventSource 関連のコードとロジックが削除されます。
Http3Support (.NET 10 以降) falseに設定すると、System.Net.Httpの HTTP/3 のサポートに関連するコードが削除されます。
HttpActivityPropagationSupport falseに設定すると、System.Net.Httpの診断サポートに関連するコードが削除されます。
InvariantGlobalization trueに設定すると、グローバリゼーション固有のコードとデータが削除されます。 詳細については、「インバリアント モード」を参照してください。
MetadataUpdaterSupport falseに設定すると、ホット リロードに関連するメタデータ更新固有のロジックが削除されます。
MetricsSupport falseに設定すると、System.Diagnostics.Metricsインストルメンテーションのサポートが削除されます。
StackTraceLineNumberSupport (.NET 11 以降) (PublishAot のみ)。 trueに設定すると、出力実行可能モジュールに追加の行番号情報が生成されます。 スタック トレース ( Environment.StackTraceException.ToStringなど) には、実行時のファイル名と行番号に関する情報が含まれます。 この情報は、デバッグ シンボル ファイル (PDB/DWO/dSYM ファイル) に生成される情報に似ています。 ただし、 PublishAotで発行されたアプリの場合、ランタイムはネイティブ シンボル ファイルを読み取りません。デバッグ シンボルはデバッガーでのみ使用されます。
StackTraceSupport (.NET 8 以降) falseに設定すると、ランタイムによるスタック トレースの生成 (Environment.StackTraceException.ToStringなど) のサポートが削除されます。 スタック トレース文字列から削除される情報の量は、他のデプロイ オプションによって異なります。 このオプションは、デバッガーによって生成されるスタック トレースには影響しません。
UseNativeHttpHandler trueに設定すると、Android および iOS 用の HttpMessageHandler の既定のプラットフォーム実装が使用され、マネージド実装が削除されます。
UseSizeOptimizedLinq (.NET 10 以降) trueに設定すると、アプリケーションのサイズに悪影響を与える LINQ のスループット最適化の一部が削除されます。 既定値は truePublishAot。このプロパティを false に設定して一部のアプリケーションをネイティブにコンパイルできない場合があります。
UseSystemResourceKeys trueに設定すると、System.* アセンブリの例外メッセージが削除されます。 System.* アセンブリから例外がスローされた場合、メッセージは完全なメッセージではなく、簡略化されたリソース ID になります。
XmlResolverIsNetworkingEnabledByDefault (.NET 8 以降) falseに設定すると、System.Xmlのファイル以外の URL を解決するためのサポートが削除されます。 ファイル システムの解決のみがサポートされています。

これらのプロパティを使用すると、関連するコードがトリミングされ、runtimeconfig ファイルを介して機能も無効になります。 対応する runtimeconfig オプションなど、これらのプロパティの詳細については、機能スイッチに関するページを参照してください。 一部の SDK には、これらのプロパティの既定値が設定されている場合があります。

トリミング時に無効になっているフレームワーク機能

次の機能は、静的に参照されないコードを必要とするため、トリミングと互換性がありません。 トリミングされたアプリでは、これらの機能は既定で無効になっています。

警告

これらの機能は、ご自身の責任において有効にしてください。 追加の作業を行わない場合、動的に参照されるコードを保持するために、トリミングされたアプリが破損する可能性があります。

  • <BuiltInComInteropSupport>

    組み込みの COM サポートは無効です。

  • <CustomResourceTypesSupport>

    カスタム リソースの種類の使用はサポートされていません。 カスタム リソースの種類にリフレクションを使用する ResourceManager コード パスはトリミングされます。

  • <EnableCppCLIHostActivation>

    C++/CLI ホストのアクティブ化は無効です。

  • <EnableUnsafeBinaryFormatterInDesigntimeLicenseContextSerialization>

    DesigntimeLicenseContextSerializerBinaryFormatter のシリアル化は無効です。

  • <StartupHookSupport>

    MainDOTNET_STARTUP_HOOKSする前のコードの実行はサポートされていません。 詳細については、スタートアップ フックのホストに関するページをご覧ください。