Compartir a través de


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

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:

Consulte también