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, serializer cenderung memiliki penggunaan refleksi yang kompleks. Banyak dari penggunaan ini tidak dapat diakalisis pada waktu build. 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 | Generator sumber pengikatan konfigurasi |
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter | Bermigrasi jauh dari serialisasi BinaryFormatter karena kelemahan 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.
Ketidaksesuaian platform Windows
Bagian berikut mencantumkan ketidaksesuaian yang diketahui dengan pemangkasan di Windows.
Pemrograman NET dengan C++/CLI
Pemrograman NET dengan C++/CLI saat ini tidak mendukung pemangkasan.
Marshalling COM bawaan
Alternatif: COM Wrappers
Marshalling COM otomatis telah dibangun ke .NET sejak .NET Framework 1.0. Ini menggunakan analisis kode run-time untuk mengonversi secara otomatis antara objek COM asli dan objek .NET terkelola. Sayangnya, analisis pemangkasan tidak selalu dapat memprediksi kode .NET apa yang perlu dipertahankan untuk pernapasan COM otomatis. Namun, jika COM Wrappers digunakan sebagai gantinya, analisis pemangkasan dapat menjamin bahwa semua kode yang digunakan akan dipertahankan dengan benar.
WPF
Kerangka kerja Windows Presentation Foundation (WPF) membuat penggunaan refleksi yang substansial dan beberapa fitur sangat bergantung pada inspeksi kode run-time. 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 WPF tidak kompatibel dengan pemangkasan masalah untuk kemajuan mengaktifkan pemangkasan untuk WPF.
Formulir Windows
Kerangka kerja Formulir Windows membuat penggunaan refleksi minimal, tetapi sangat bergantung pada marshalling COM bawaan. Sayangnya, hampir tidak ada aplikasi Formulir Windows yang dapat dijalankan tanpa marshalling COM bawaan, sehingga dukungan pemangkasan untuk aplikasi Formulir Windows dinonaktifkan di .NET SDK saat ini. Lihat Membuat WinForms memangkas masalah yang kompatibel untuk kemajuan dalam mengaktifkan pemangkasan untuk Formulir Windows.