Compartir a través de


Implementación de AOT nativo

La publicación de la aplicación como AOT nativo genera una aplicación autocontenida y que se ha compilado con antelación (AOT) en código nativo. Las aplicaciones AOT nativas tienen un tiempo de inicio más rápido y superficies de memoria más pequeñas. Estas aplicaciones se pueden ejecutar en máquinas que no tienen instalado el entorno de ejecución de .NET.

La ventaja de Native AOT es la más significativa para las cargas de trabajo con un gran número de instancias implementadas, como la infraestructura en la nube y los servicios a hiperescala. .NET 8 agrega compatibilidad con ASP.NET Core para AOT nativo.

El modelo de implementación de AOT nativo usa un compilador de antemano para compilar IL en código nativo en el momento de la publicación. Las aplicaciones AOT nativas no usan un compilador Just-In-Time (JIT) cuando se ejecuta la aplicación. Las aplicaciones AOT nativas se pueden ejecutar en entornos restringidos en los que no se permite un JIT. Las aplicaciones AOT nativas tienen como destino un entorno de tiempo de ejecución específico, como Linux x64 o Windows x64, al igual que publicar una aplicación independiente.

Prerrequisitos

Visual Studio 2022, incluida la carga de trabajo Desarrollo de escritorio con C++ con todos los componentes predeterminados.

Publicación de AOT nativo mediante la CLI

  1. Agregue <PublishAot>true</PublishAot> al archivo del proyecto.

    Esta propiedad habilita la compilación AOT nativa durante el proceso de publicación. También permite el análisis dinámico de uso de código durante la compilación y la edición. Es preferible colocar este valor en el archivo del proyecto en lugar de pasarlo en la línea de comandos, ya que controla los comportamientos fuera de la publicación.

    <PropertyGroup>
        <PublishAot>true</PublishAot>
    </PropertyGroup>
    
  2. Publique la aplicación para un identificador de tiempo de ejecución específico mediante dotnet publish -r <RID>.

    En el ejemplo siguiente se publica la aplicación para Windows como una aplicación AOT nativa en una máquina con los requisitos previos necesarios instalados.

    dotnet publish -r win-x64 -c Release

    En el ejemplo siguiente se publica la aplicación para Linux como una aplicación AOT nativa. Un binario AOT nativo producido en una máquina Linux solo funcionará en la misma versión o posterior de Linux. Por ejemplo, el binario AOT nativo generado en Ubuntu 20.04 se ejecutará en Ubuntu 20.04 y versiones posteriores, pero no se ejecutará en Ubuntu 18.04.

    dotnet publish -r linux-arm64 -c Release

La aplicación está disponible en el directorio publish y contiene todo el código necesario para ejecutarla, incluida una versión eliminada del entorno de ejecución de coreclr.

Consulte los ejemplos de AOT nativos disponibles en el repositorio dotnet/samples en GitHub. Los ejemplos incluyen Dockerfiles de Linux y Windows que muestran cómo automatizar la instalación de requisitos previos y publicar proyectos de .NET con AOT nativo mediante contenedores.

Analizadores de compatibilidad de AOT

La IsAotCompatible propiedad se usa para indicar si una biblioteca es compatible con AOT nativo. Tenga en cuenta cuándo una biblioteca establece la propiedad IsAotCompatible a true, por ejemplo:

<PropertyGroup>
    <IsAotCompatible>true</IsAotCompatible>
</PropertyGroup>

La configuración anterior asigna un valor predeterminado de true a las siguientes propiedades:

  • IsTrimmable
  • EnableTrimAnalyzer
  • EnableSingleFileAnalyzer
  • EnableAotAnalyzer

Estos analizadores ayudan a garantizar que una biblioteca sea compatible con AOT nativo.

Información de depuración nativa

De forma predeterminada, la publicación de AOT nativa genera información de depuración en un archivo independiente:

  • Linux: .dbg
  • Windows: .pdb
  • macOS: carpeta .dSYM

El archivo de depuración es necesario para ejecutar la aplicación en el depurador o inspeccionar volcados de fallos. En plataformas similares a Unix, establezca la StripSymbols propiedad en false para incluir la información de depuración en el binario nativo. La inclusión de información de depuración hace que el binario nativo sea mayor.

<PropertyGroup>
    <StripSymbols>false</StripSymbols>
</PropertyGroup>

Limitaciones de la implementación de AOT nativa

Las aplicaciones AOT nativas tienen las siguientes limitaciones:

  • No hay carga dinámica, por ejemplo, Assembly.LoadFile.
  • No hay generación de código en tiempo de ejecución, por ejemplo, System.Reflection.Emit.
  • Sin C++/CLI.
  • Windows: no hay COM integrado.
  • Exige recorte, que tiene limitaciones.
  • Implica la compilación en un único archivo, que tiene incompatibilidades conocidas.
  • Las aplicaciones incluyen bibliotecas en tiempo de ejecución necesarias (al igual que las aplicaciones independientes, aumentando su tamaño en comparación con las aplicaciones dependientes del marco).
  • System.Linq.Expressions use siempre su formato interpretado, que es más lento que el código compilado generado en tiempo de ejecución.
  • Los parámetros genéricos sustituidos por argumentos de tipo struct tendrán código especializado generado para cada creación de instancias. En el entorno de ejecución dinámico, se generan muchas instancias a petición. En AOT nativo, todas las instancias se generan previamente. Esto puede tener un impacto significativo en el tamaño del disco de la aplicación. Los métodos virtuales genéricos y los métodos de instancia genéricos también tendrán una instanciación para cada tipo de implementación o sobrescritura.
  • No todas las bibliotecas de tiempo de ejecución están completamente anotadas para ser compatibles con AOT nativo. Es decir, algunos avisos de las bibliotecas en tiempo de ejecución no son accionables por los desarrolladores finales.
  • Compatibilidad de diagnóstico para depuración y generación de perfiles con algunas limitaciones.
  • Compatibilidad con algunas características principales de ASP.NET. Para obtener más información, consulte soporte de ASP.NET Core para AOT nativo.

El proceso de publicación analiza todo el proyecto y sus dependencias para ver posibles limitaciones. Se emiten advertencias para cada limitación que podría encontrar la aplicación publicada en tiempo de ejecución.

Restricciones de plataforma/arquitectura

En la tabla siguiente se muestran los destinos de compilación admitidos.

Plataforma Arquitectura soportada Notas
Windows x64, Arm64
Linux x64, Arm64
macOS x64, Arm64
Ios Arm64 Soporte experimental
iOSSimulator x64, Arm64 Soporte experimental
tvOS Arm64 Soporte experimental
tvOSSimulator x64, Arm64 Soporte experimental
MacCatalyst x64, Arm64 Soporte experimental
Androide x64, Arm64 Experimental, sin interoperabilidad de Java integrada

Para obtener más información sobre cómo la plataforma específica es compatible con AOT Nativo, siga el enlace de la tabla.