Dela via


IL3050: Undvik att anropa medlemmar som kommenterats med "RequiresDynamicCodeAttribute" när de publicerar som intern AOT

Orsak

När du publicerar en app som intern AOT (genom att ange PublishAot egenskapen till true i ett projekt) kan anrop av medlemmar som kommenterats med RequiresDynamicCodeAttribute attributet resultera i undantag vid körning. Medlemmar som kommenterats med det här attributet kan kräva möjlighet att dynamiskt skapa ny kod vid körning, och intern AOT-publiceringsmodell ger inte något sätt att generera intern kod vid körning.

Regelbeskrivning

RequiresDynamicCodeAttribute anger att medlemmen refererar till kod som kan kräva kodgenerering vid körning.

Exempel

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

Så här åtgärdar du överträdelser

Medlemmar som kommenterats med RequiresDynamicCodeAttribute attributet har ett meddelande som ger användbar information till användare som publicerar som intern AOT. Överväg att anpassa befintlig kod till attributets meddelande eller ta bort det anrop som bryter mot det.

Vissa API:er som kommenterats med RequiresDynamicCodeAttribute utlöser inte en varning när de anropas i ett specifikt mönster. Mer information finns i Inbyggda API:er märkta KräverDynamicCode.