IL3050: Evitare di chiamare i membri annotati con 'RequiresDynamicCodeAttribute' durante la pubblicazione come AOT nativo
Causa
Quando si pubblica un'app come AOT nativo (impostando la proprietà PublishAot
su true
in un progetto), la chiamata di membri annotati con l'attributo RequiresDynamicCodeAttribute
potrebbe generare eccezioni in fase di esecuzione. I membri annotati con questo attributo potrebbero richiedere la possibilità di creare dinamicamente nuovo codice in fase di esecuzione e il modello di pubblicazione AOT nativo non offre un modo per generare codice nativo in fase di esecuzione.
Descrizione regola
RequiresDynamicCodeAttribute indica che il membro fa riferimento al codice che potrebbe richiedere la generazione di codice in fase di esecuzione.
Esempio
// 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 { }
Come correggere le violazioni
I membri annotati con l'attributo RequiresDynamicCodeAttribute
hanno un messaggio che fornisce informazioni utili agli utenti che eseguono la pubblicazoine come AOT nativo. È consigliabile adattare il codice esistente al messaggio dell'attributo o rimuovere la chiamata che lo viola.
Alcune API annotate con RequiresDynamicCodeAttribute
non attivano un avviso quando viene chiamato in un modello specifico. Per altre informazioni, vedere API intrinseche contrassegnate con RequiresDynamicCode.