Condividi tramite


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.