IL3050: Hindari memanggil anggota yang dianotasikan dengan 'RequiresDynamicCodeAttribute' saat menerbitkan sebagai AOT Asli
Penyebab
Saat Anda menerbitkan aplikasi sebagai AOT Asli (dengan mengatur PublishAot
properti ke true
dalam proyek), memanggil anggota yang dianotasikan dengan RequiresDynamicCodeAttribute
atribut dapat mengakibatkan pengecualian pada waktu proses. Anggota yang dianotasikan dengan atribut ini mungkin memerlukan kemampuan untuk membuat kode baru secara dinamis pada waktu proses, dan model penerbitan AOT Asli tidak menyediakan cara untuk menghasilkan kode asli pada waktu proses.
Deskripsi aturan
RequiresDynamicCodeAttribute menunjukkan bahwa anggota mereferensikan kode yang mungkin memerlukan pembuatan kode pada waktu proses.
Contoh
// AOT analysis warning IL3050: Program.<Main>$(String[]): Using member 'System.Type.MakeGenericType(Type[])'
// which has 'RequiresDynamicCodeAttribute' can break functionality when AOT compiling. The native code for
// this instantiation might not be available at runtime.
typeof(Generic<>).MakeGenericType(unknownType);
class Generic<T> { }
struct SomeStruct { }
Cara memperbaiki pelanggaran
Anggota yang dianotasikan dengan RequiresDynamicCodeAttribute
atribut memiliki pesan yang memberikan informasi berguna kepada pengguna yang menerbitkan sebagai AOT Asli. Pertimbangkan untuk mengadaptasi kode yang ada ke pesan atribut atau menghapus panggilan yang melanggar.
Beberapa API yang dianotasi dengan RequiresDynamicCodeAttribute
tidak memicu peringatan saat dipanggil dalam pola tertentu. Untuk informasi selengkapnya, lihat API Intrinsik bertanda RequiresDynamicCode.