IL3050 : évitez d’appeler des membres annotés avec « RequiresDynamicCodeAttribute » lors de la publication en tant qu’AOT natif
Cause
Lors de la publication d’une application en tant qu’AOA natif (en définissant la propriété PublishAot
sur true
dans un projet), l’appel de membres annotés avec l’attribut RequiresDynamicCodeAttribute
peut entraîner des exceptions lors de l’exécution. Les membres annotés avec cet attribut peuvent nécessiter la possibilité de créer dynamiquement du code au moment de l’exécution, et le modèle de publication AOA natif ne permet pas de générer du code natif au moment de l’exécution.
Description de la règle
RequiresDynamicCodeAttribute indique que le membre fait référence au code qui peut nécessiter la génération de code lors de l’exécution.
Exemple
// 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 { }
Comment corriger les violations
Les membres annotés avec l’attribut RequiresDynamicCodeAttribute
ont un message qui fournit des informations utiles aux utilisateurs qui publient en tant qu’AOT natif. Envisagez d’adapter le code existant au message de l’attribut ou de supprimer l’appel non conforme.
Certaines API annotées avec RequiresDynamicCodeAttribute
ne déclenchent pas d'avertissement lorsqu'elles sont appelées selon un modèle spécifique. Pour plus d'informations, voir les API intrinsèques marquées RequiresDynamicCode.