Compartir vía


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.