Ketidaksesuaian pemangkasan yang diketahui

Artikel ini mencantumkan pola yang tidak kompatibel dengan pemangkasan dengan alat saat ini.

Serializer berbasis refleksi

Alternatif: Serializer bebas refleksi.

Banyak penggunaan pantulan dapat dibuat kompatibel dengan pemangkasan, seperti yang dijelaskan dalam Pengantar peringatan pemangkasan. Namun, para serializer cenderung memiliki penggunaan refleksi yang kompleks. Banyak dari penggunaan ini tidak dapat dianalisis saat pembangunan. Sayangnya, opsi terbaik sering kali adalah menulis ulang sistem untuk menggunakan pembuatan sumber.

Tabel berikut mencantumkan serializer berbasis refleksi populer dan alternatif yang direkomendasikan:

Serializer Alternatif
Newtonsoft.Json Sumber yang dihasilkan System.Text.Json
System.Configuration.ConfigurationManager Penghasil sumber pengikatan konfigurasi
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter Menghindari penggunaan BinaryFormatter untuk serialisasi dikarenakan kelemahan pada aspek keamanan dan keandalannya.

Pembuatan kode runtime melalui JIT

Pembuatan kode runtime melalui JIT, misalnya, melalui System.Reflection.Emit tidak kompatibel dengan pemangkasan.

Pemuatan dan eksekusi rakitan dinamis

Pemangkasan dan pemuatan rakitan dinamis adalah masalah umum untuk sistem yang mendukung plugin atau ekstensi, biasanya melalui API seperti LoadFrom(String). Pemangkasan bergantung pada melihat semua rakitan pada waktu build, sehingga tahu kode mana yang digunakan dan tidak dapat dipangkas. Sebagian besar sistem plugin memuat kode pihak ketiga secara dinamis, sehingga tidak mungkin bagi pemangkas untuk mengidentifikasi kode apa yang diperlukan.

Ketidakcocokan platform Windows

Bagian berikut ini mencantumkan ketidakcocokan yang diketahui dalam proses pemangkasan di Windows.

Pemrograman NET dengan C++/CLI

Pemrograman NET dengan C++/CLI saat ini tidak mendukung pemangkasan.

Marshalling COM Terintegrasi

Alternatif: COM Wrappers

Marshalling COM otomatis telah terintegrasi dalam .NET sejak .NET Framework 1.0. Ini menggunakan analisis kode runtime untuk secara otomatis mengonversi antara objek COM asli dan objek .NET terkelola. Sayangnya, analisis pemangkasan tidak selalu dapat memprediksi kode .NET apa yang perlu dipertahankan untuk marshalling COM otomatis. Namun, jika COM Wrappers digunakan sebagai gantinya, analisis pemangkasan dapat menjamin bahwa semua kode yang digunakan akan dipertahankan dengan benar.

WPF (Windows Presentation Foundation)

Kerangka kerja Windows Presentation Foundation (WPF) membuat penggunaan refleksi yang substansial dan beberapa fitur sangat bergantung pada inspeksi kode runtime. Analisis pemangkasan tidak memungkinkan untuk mempertahankan semua kode yang diperlukan untuk aplikasi WPF. Sayangnya, hampir tidak ada aplikasi WPF yang dapat dijalankan setelah pemangkasan, sehingga dukungan pemangkasan untuk WPF saat ini dinonaktifkan di .NET SDK. Lihat masalah WPF tidak kompatibel dengan pemangkasan untuk kemajuan dalam mengaktifkan pemangkasan untuk WPF.

Formulir Windows

Kerangka kerja Windows Forms membuat penggunaan refleksi minimal, tetapi sangat bergantung pada marshalling COM bawaan. Sayangnya, hampir tidak ada aplikasi Windows Forms yang dapat dijalankan tanpa marshalling COM bawaan, sehingga dukungan pemangkasan untuk aplikasi Windows Forms dinonaktifkan di .NET SDK saat ini. Lihat masalah Menjadikan WinForms kompatibel dengan pemangkasan untuk kemajuan dalam mengaktifkan pemangkasan untuk Windows Forms.