Bagikan melalui


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.