Partilhar via


Tutorial: Publicar um aplicativo ASP.NET Core usando AOT nativo

ASP.NET Core 8.0 introduz suporte para nativo do .NET com compilação antecipada (AOT).

Observação

  • O recurso AOT nativo está atualmente em visualização.
  • No .NET 8, nem todos os recursos do ASP.NET Core são compatíveis com o AOT nativo.
  • São fornecidas guias para as instruções da CLI do .NET e do Visual Studio .
    • O Visual Studio é um pré-requisito mesmo se a guia CLI estiver selecionada.
    • A CLI deve ser usada para publicar mesmo se a guia Visual Studio estiver selecionada.

Pré-requisitos

Observação

O Visual Studio 2022 é necessário porque o AOT nativo requer link.exe e as bibliotecas de tempo de execução estático do Visual C++. Não há planos para oferecer suporte a AOT Nativo sem Visual Studio.

Criar um aplicativo Web com AOT nativo

Crie um aplicativo de API ASP.NET Core configurado para funcionar com AOT nativo:

Execute os seguintes comandos:

dotnet new webapiaot -o MyFirstAotWebApi && cd MyFirstAotWebApi

Saída semelhante ao exemplo a seguir é exibida:

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.

Publicar o aplicativo AOT nativo

Verifique se o aplicativo pode ser publicado usando AOT nativo:

dotnet publish

O comando dotnet publish:

  • Compila os arquivos de origem.
  • Gera arquivos de código-fonte que são compilados.
  • Passa assemblies gerados para um compilador IL nativo. O compilador IL produz o executável nativo. O executável nativo contém o código da máquina nativa.

Saída semelhante ao exemplo a seguir é exibida:

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\

A saída pode diferir do exemplo anterior, dependendo da versão do .NET 8 usada, do diretório usado e de outros fatores.

Analise o conteúdo do diretório de saída:

dir bin\Release\net8.0\win-x64\publish

Saída semelhante ao exemplo a seguir é exibida:

    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

O executável é independente e não requer um tempo de execução do .NET para ser executado. Quando iniciado, ele se comporta da mesma forma que o aplicativo executado no ambiente de desenvolvimento. Execute o aplicativo AOT:

.\bin\Release\net8.0\win-x64\publish\MyFirstAotWebApi.exe

Saída semelhante ao exemplo a seguir é exibida:

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 e AOT nativo

Muitas das bibliotecas populares usadas em projetos ASP.NET Core atualmente têm alguns problemas de compatibilidade quando usadas em um projeto direcionado à AOT nativa, como:

  • Uso da reflexão para inspecionar e descobrir tipos.
  • Carregamento condicional de bibliotecas em tempo de execução.
  • Geração de código em tempo real para implementar funcionalidades.

As bibliotecas que usam esses recursos dinâmicos precisam ser atualizadas para trabalhar com AOT nativo. Eles podem ser atualizados usando ferramentas como geradores de fontes Roslyn.

Os autores de bibliotecas que desejam oferecer suporte ao Native AOT são incentivados a:

Ver também