Start Debugging

Etiqueta: native-aot

19 posts · Página1de2

MSTest 4.4 gradúa el generador de código fuente de reflexión, y los proyectos Native AOT lo obtienen automáticamente
MSTest 4.4 saca a MSTest.SourceGeneration del estado experimental y lo alinea con la versión de MSTest. Los proyectos de pruebas Native AOT lo incorporan sin opt-in, el modo ReflectionFree ya puede omitir la detección en runtime para [TestMethod] y [DataRow] simples, y cinco diagnósticos AOTSG te dicen qué formas de prueba no sobreviven.
Dependiente del framework vs autocontenido vs Native AOT para una imagen de contenedor de .NET 11
Dependiente del framework sobre una imagen aspnet chiseled es el valor por defecto correcto para un servicio ASP.NET Core en .NET 11, porque la capa del runtime se comparte entre servicios y una CVE del runtime se corrige actualizando la imagen base. Autocontenido con trimming y Native AOT compran una imagen de 2x a 5x más pequeña y un arranque en frío mucho más rápido, y te cuestan eso. Tamaños publicados reales, las cuentas de las capas compartidas y el bug de inferencia de imagen base de .NET 11 que rompe la ruta AOT.
¿Qué es el código seguro para trimming y cómo lo escribo?
El código seguro para trimming es código que el trimmer de .NET puede probar estáticamente que es alcanzable, así que sobrevive cuando se elimina el código sin usar de una app autónoma. Esta es la guía práctica: enciende el analizador, lleva a cero cada advertencia IL2xxx, anota la reflexión con DynamicallyAccessedMembers, propaga RequiresUnreferencedCode a las APIs públicas y reemplaza los patrones no analizables con generadores de código fuente.
¿Qué es el atributo DynamicallyAccessedMembers?
DynamicallyAccessedMembers le indica al trimmer de .NET y al compilador AOT cuáles miembros de un Type alcanzas por reflexión, para que se conserven en lugar de ser eliminados. Convierte una silenciosa MissingMethodException en runtime en una advertencia IL2070 en tiempo de compilación. Esto es lo que hace el atributo, cómo funciona el análisis de flujo de datos detrás de él y cómo anotar correctamente parámetros, campos y parámetros de tipo genéricos.
Siguiente