Delen via


IL3050: Vermijd het aanroepen van leden met aantekeningen met 'RequiresDynamicCodeAttribute' bij het publiceren als native AOT

Oorzaak

Wanneer u een app publiceert als systeemeigen AOT (door de PublishAot eigenschap true in te stellen in een project), kunnen het aanroepen van leden met aantekeningen met het RequiresDynamicCodeAttribute kenmerk leiden tot uitzonderingen tijdens de runtime. Leden die zijn geannoteerd met dit kenmerk, hebben mogelijk de mogelijkheid nodig om dynamisch nieuwe code te maken tijdens runtime. Het systeemeigen AOT-publicatiemodel biedt geen manier om systeemeigen code te genereren tijdens runtime.

Beschrijving van regel

RequiresDynamicCodeAttribute geeft aan dat het lid verwijst naar code die tijdens runtime mogelijk codegeneratie vereist.

Opmerking

// 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 { }

Schendingen oplossen

Leden die zijn geannoteerd met het RequiresDynamicCodeAttribute kenmerk hebben een bericht dat nuttige informatie biedt aan gebruikers die publiceren als systeemeigen AOT. Overweeg om bestaande code aan te passen aan het bericht van het kenmerk of om de aanroep te verwijderen.

Sommige API's waarvoor RequiresDynamicCodeAttribute aantekeningen zijn gemaakt, activeren geen waarschuwing wanneer ze in een specifiek patroon worden aangeroepen. Zie Intrinsieke API's gemarkeerd als RequiresDynamicCode voor meer informatie.