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.