Tutorial: Publicación de una aplicación de ASP.NET Core mediante AOT nativo
ASP.NET Core 8.0 ofrece compatibilidad con .NET ahead-of-time (AOT) nativo.
Nota
- La característica AOT nativo se encuentra actualmente en versión preliminar.
- En .NET 8, no todas las características de ASP.NET Core son compatibles con AOT nativo.
- Se proporcionan pestañas para las instrucciones de la CLI de .NET y Visual Studio:
- Visual Studio es un requisito previo incluso si se selecciona la pestaña CLI.
- Se debe usar la CLI para la publicación incluso si estuviera seleccionada la pestaña de Visual Studio.
Requisitos previos
SDK de .NET 8.0
En Linux, vea Requisitos previos para la implementación de AOT nativo.
Visual Studio 2022 Preview con la carga de trabajo Desarrollo del escritorio con C++ instalada.
Nota:
La versión preliminar de Visual Studio 2022 es necesaria porque AOT nativo necesita link.exe y las bibliotecas en tiempo de ejecución estáticas de Visual C++. No hay planes para admitir AOT nativo sin Visual Studio.
Creación de una aplicación web con AOT nativo
Cree una aplicación de API de ASP.NET Core que se configure para funcionar con AOT nativo:
Ejecute los comandos siguientes:
dotnet new webapiaot -o MyFirstAotWebApi && cd MyFirstAotWebApi
Se muestra una salida similar a la siguiente:
The template "ASP.NET Core Web API (Native AOT)" was created successfully.
Processing post-creation actions...
Restoring C:\Code\Demos\MyFirstAotWebApi\MyFirstAotWebApi.csproj:
Determining projects to restore...
Restored C:\Code\Demos\MyFirstAotWebApi\MyFirstAotWebApi.csproj (in 302 ms).
Restore succeeded.
Publicación de la aplicación de AOT nativo
Compruebe que la aplicación se puede publicar mediante AOT nativo:
dotnet publish
El comando dotnet publish
:
- Compila los archivos de código fuente.
- Genera archivos de código fuente que se compilan.
- Pasa los ensamblados generados a un compilador de IL nativo. El compilador de IL genera el ejecutable nativo. El archivo ejecutable nativo contiene el código de máquina nativo.
Se muestra una salida similar a la siguiente:
MSBuild version 17.<version> for .NET
Determining projects to restore...
Restored C:\Code\Demos\MyFirstAotWebApi\MyFirstAotWebApi.csproj (in 241 ms).
C:\Code\dotnet\aspnetcore\.dotnet\sdk\8.0.<version>\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIde
ntifierInference.targets(287,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotne
t-support-policy [C:\Code\Demos\MyFirstAotWebApi\MyFirstAotWebApi.csproj]
MyFirstAotWebApi -> C:\Code\Demos\MyFirstAotWebApi\bin\Release\net8.0\win-x64\MyFirstAotWebApi.dll
Generating native code
MyFirstAotWebApi -> C:\Code\Demos\MyFirstAotWebApi\bin\Release\net8.0\win-x64\publish\
La salida puede ser distinta a la del ejemplo anterior según la versión de .NET 8 usada, el directorio empleado y otros factores.
Examine el contenido del directorio de salida:
dir bin\Release\net8.0\win-x64\publish
Se muestra una salida similar a la siguiente:
Directory: C:\Code\Demos\MyFirstAotWebApi\bin\Release\net8.0\win-x64\publish
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 30/03/2023 1:41 PM 9480704 MyFirstAotWebApi.exe
-a--- 30/03/2023 1:41 PM 43044864 MyFirstAotWebApi.pdb
El archivo ejecutable es independiente y no requiere un entorno de ejecución de .NET. Al iniciarse, se comporta igual que la aplicación que se ejecuta en el entorno de desarrollo. Ejecute la aplicación AOT:
.\bin\Release\net8.0\win-x64\publish\MyFirstAotWebApi.exe
Se muestra una salida similar a la siguiente:
info: Microsoft.Hosting.Lifetime[14]
Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[0]
Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
Content root path: C:\Code\Demos\MyFirstAotWebApi
Bibliotecas y AOT nativo
Muchas de las bibliotecas populares que se usan en los proyectos de ASP.NET Core actualmente tienen algunos problemas de compatibilidad cuando se utilizan en un proyecto que tiene como destino AOT nativo, por ejemplo:
- Uso de la reflexión para inspeccionar y detectar tipos.
- Carga condicional de bibliotecas en tiempo de ejecución.
- Generar código sobre la marcha para implementar la funcionalidad.
Las bibliotecas que usan estas características dinámicas se deben actualizar para poder trabajar con AOT nativo. Se pueden actualizar usando herramientas como generadores de origen de Roslyn.
A los creadores de bibliotecas que quieran admitir AOT nativo se les recomienda lo siguiente:
- Obtenga información sobre los requisitos de compatibilidad de AOT nativo.
- Prepare la biblioteca para el recorte.
Consulte también
- Compatibilidad de ASP.NE Core con AOT nativo
- Implementación de AOT nativo
- Uso del generador de origen del enlazador de configuración
- Plantilla de compilación AOT de API mínima
- Comparación de
WebApplication.CreateBuilder
conCreateSlimBuilder
- Exploración del nuevo generador de origen de API mínimo
- Sustitución de llamadas de método por interceptores
- Generador de origen de enlace de configuración