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.