IL3050: Evite llamar a miembros anotados con "RequiresDynamicCodeAttribute" al publicar aplicaciones como AOT nativas
Causa
Al publicar una aplicación como AOT nativa (estableciendo la propiedad PublishAot
en true
en un proyecto), llamar a los miembros anotados con el atributo RequiresDynamicCodeAttribute
puede dar lugar a excepciones en tiempo de ejecución. Los miembros anotados con este atributo pueden requerir la capacidad de crear código nuevo dinámicamente en tiempo de ejecución, y el modelo de publicación AOT nativo no proporciona una manera de generar código nativo en tiempo de ejecución.
Descripción de la regla
RequiresDynamicCodeAttribute indica que el miembro hace referencia a código que puede requerir la generación de código en tiempo de ejecución.
Ejemplo
// 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 { }
Cómo corregir infracciones
Los miembros anotados con el atributo RequiresDynamicCodeAttribute
tienen un mensaje que proporciona información útil a los usuarios que publican aplicaciones como AOT nativas. Considere la posibilidad de adaptar el código existente al mensaje del atributo o de quitar la llamada infractora.
Algunas API anotadas con RequiresDynamicCodeAttribute
no generan una advertencia cuando se llama con un patrón específico. Para obtener más información, consulte API intrínsecas marcadas como RequireDynamicCode.