Bagikan melalui


Opsi pemangkasan

Properti dan item MSBuild yang dijelaskan dalam artikel ini memengaruhi perilaku penyebaran mandiri yang dipangkas. Beberapa opsi menyebutkan ILLink, yang merupakan nama alat yang mendasar yang mengimplementasikan pemangkasan. Untuk informasi selengkapnya tentang alat yang mendasar, lihat dokumentasi Pemangkas.

Pemangkasan dengan PublishTrimmed diperkenalkan dalam .NET Core 3.0. Opsi lain tersedia di .NET 5 dan versi yang lebih baru.

Mengaktifkan pemangkasan

  • <PublishTrimmed>true</PublishTrimmed>

    Aktifkan pemangkasan selama penerbitan. Pengaturan ini juga menonaktifkan fitur yang tidak kompatibel dengan trim dan memungkinkan analisis pemangkasan selama build. Di aplikasi .NET 8 dan yang lebih baru, pengaturan ini juga memungkinkan pengikatan konfigurasi dan meminta generator sumber delegasi.

Catatan

Jika Anda menentukan pemangkasan sebagai diaktifkan dari baris perintah, pengalaman penelusuran kesalahan Anda akan berbeda dan Anda mungkin mengalami bug tambahan di produk akhir.

Tempatkan pengaturan ini dalam file proyek untuk memastikan bahwa pengaturan berlaku selama dotnet build, bukan hanya dotnet publish.

Pengaturan ini juga memungkinkan penganalisis Roslyn kompatibilitas pemangkasan dan menonaktifkan fitur yang tidak kompatibel dengan pemangkasan.

Penganalisis Roslyn

Pengaturan PublishTrimmed di .NET 6+ juga memungkinkan penganalisis Roslyn yang menunjukkan serangkaian peringatan analisis terbatas . Anda juga dapat mengaktifkan atau menonaktifkan penganalisis secara independen dari PublishTrimmed.

  • <EnableTrimAnalyzer>true</EnableTrimAnalyzer>

    Aktifkan penganalisis Roslyn untuk subset peringatan analisis pemangkasan.

Menutupi peringatan

Anda dapat menekan kode peringatan individual Ada opsi tambahan yang mengontrol perilaku peringatan sebagai kesalahan ILLink secara independen:

  • <ILLinkTreatWarningsAsErrors>false</ILLinkTreatWarningsAsErrors>

    Jangan perlakukan peringatan ILLink sebagai kesalahan. Ini mungkin berguna untuk menghindari mengubah peringatan analisis pemangkasan menjadi kesalahan saat memperlakukan peringatan kompilator sebagai kesalahan secara global.

Tampilkan peringatan terperinci

Dalam .NET 6+, analisis pemangkasan menghasilkan paling banyak satu peringatan untuk setiap rakitan yang berasal dari PackageReference, yang menunjukkan bahwa internal rakitan tidak kompatibel dengan pemangkasan. Anda juga dapat menampilkan peringatan individual untuk semua rakitan:

  • <TrimmerSingleWarn>false</TrimmerSingleWarn>

    Tampilkan semua peringatan terperinci, alih-alih menciutkannya ke satu peringatan per perakitan.

Menghapus simbol

Simbol biasanya dipangkas agar sesuai dengan rakitan yang dipangkas. Anda juga dapat menghapus semua simbol:

  • <TrimmerRemoveSymbols>true</TrimmerRemoveSymbols>

    Hapus simbol dari aplikasi yang dipangkas, termasuk PDB yang disematkan dan file PDB terpisah. Ini berlaku untuk kode aplikasi dan dependensi apa pun yang disertakan dengan simbol.

SDK juga memungkinkan untuk menonaktifkan dukungan debugger menggunakan properti DebuggerSupport. Ketika dukungan debugger dinonaktifkan, pemangkasan akan menghapus simbol secara otomatis (TrimmerRemoveSymbols akan default ke true).

Memangkas fitur pustaka kerangka kerja

Beberapa area fitur pustaka kerangka kerja dilengkapi dengan arahan pemangkas yang memungkinkan untuk menghapus kode untuk fitur yang dinonaktifkan.

Properti MSBuild Deskripsi
AutoreleasePoolSupport Saat diatur ke false, menghapus kode yang membuat kumpulan penghapusan otomatis pada platform yang didukung. false adalah default untuk .NET SDK.
DebuggerSupport Saat diatur ke false, menghapus kode yang memungkinkan pengalaman penelusuran kesalahan yang lebih baik. Pengaturan ini juga menghapus simbol.
EnableUnsafeBinaryFormatterSerialization Saat diatur ke false, menghapus dukungan serialisasi BinaryFormatter. Untuk informasi selengkapnya, lihat Metode serialisasi BinaryFormatter usang dan implementasi BinaryFormatter dalam kotak dihapus dan selalu dilemparkan.
EnableUnsafeUTF7Encoding Saat diatur ke false, menghapus kode pengodean UTF-7 yang tidak aman. Untuk informasi selengkapnya, lihat Jalur kode UTF-7 sudah usang.
EventSourceSupport Saat diatur ke false, menghapus kode dan logika terkait EventSource.
Http3Support (.NET 10+) Saat diatur ke false, menghapus kode yang terkait dengan dukungan untuk HTTP/3 di System.Net.Http.
HttpActivityPropagationSupport Saat diatur ke false, menghapus kode yang terkait dengan dukungan diagnostik untuk System.Net.Http.
InvariantGlobalization Saat diatur ke true, menghapus kode dan data khusus globalisasi. Untuk mengetahui informasi selengkapnya, lihat Mode Invarian.
MetadataUpdaterSupport Saat diatur ke false, menghapus logika khusus pembaruan metadata yang terkait dengan hot reload.
MetricsSupport Saat diatur ke false, menghapus dukungan untuk System.Diagnostics.Metrics instrumentasi.
StackTraceSupport (.NET 8+) Saat diatur ke false, menghapus dukungan untuk menghasilkan jejak tumpukan (misalnya, Environment.StackTrace atau Exception.ToString) oleh runtime. Jumlah informasi yang dihapus dari string pelacakan tumpukan mungkin bergantung pada opsi penyebaran lainnya. Opsi ini tidak memengaruhi jejak tumpukan yang dihasilkan oleh debugger.
UseNativeHttpHandler Saat diatur ke true, menggunakan implementasi HttpMessageHandler platform default untuk Android dan iOS dan menghapus implementasi terkelola.
UseSizeOptimizedLinq (.NET 10+) Ketika diatur ke true, menghapus beberapa pengoptimalan throughput di LINQ yang berdampak buruk pada ukuran aplikasi. Default ke true dengan PublishAot; mungkin tidak mungkin untuk mengkompilasi beberapa aplikasi secara asli dengan properti ini diatur ke false.
UseSystemResourceKeys Saat diatur ke true, hapus pesan pengecualian untuk System.* rakitan. Ketika pengecualian dilemparkan dari System.* rakitan, pesan adalah ID sumber daya yang disederhanakan alih-alih pesan lengkap.
XmlResolverIsNetworkingEnabledByDefault (.NET 8+) Saat diatur ke false, menghapus dukungan untuk menyelesaikan URL non-file di System.Xml. Hanya penyelesaian sistem file yang didukung.

Properti ini menyebabkan kode terkait dipangkas dan juga menonaktifkan fitur melalui file runtimeconfig . Untuk informasi selengkapnya tentang properti ini, termasuk opsi runtimeconfig yang sesuai, lihat sakelar fitur. Beberapa SDK mungkin memiliki nilai default untuk properti ini.

Fitur kerangka kerja dinonaktifkan saat pemangkasan

Fitur berikut tidak kompatibel dengan pemangkasan karena memerlukan kode yang tidak dirujuk secara statis. Fitur-fitur ini dinonaktifkan secara default di aplikasi yang dipangkas.

Peringatan

Aktifkan fitur-fitur ini dengan risiko Anda sendiri. Mereka cenderung memutus aplikasi yang dipangkas tanpa pekerjaan tambahan untuk mempertahankan kode yang direferensikan secara dinamis.

  • <BuiltInComInteropSupport>

    Dukungan COM bawaan dinonaktifkan.

  • <CustomResourceTypesSupport>

    Penggunaan jenis sumber daya kustom tidak didukung. Jalur kode ResourceManager yang menggunakan pantulan untuk jenis sumber daya kustom dipangkas.

  • <EnableCppCLIHostActivation>

    Aktivasi host C++/CLI dinonaktifkan.

  • <EnableUnsafeBinaryFormatterInDesigntimeLicenseContextSerialization>

    DesigntimeLicenseContextSerializer penggunaan BinaryFormatter serialisasi dinonaktifkan.

  • <StartupHookSupport>

    Menjalankan kode sebelumnya Main dengan DOTNET_STARTUP_HOOKS tidak didukung. Untuk informasi selengkapnya, lihat hook startup host.