Bagikan melalui


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.