Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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
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>
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.