Compartilhar via


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

O ASP.NET Core 8.0 é compatível com ahead-of-time (AOT) nativo do .NET.

Observação

  • O recurso AOT nativo está atualmente em versão prévia.
  • No .NET 8, nem todos os recursos do ASP.NET Core são compatíveis com o AOT Nativo.
  • As guias são fornecidas 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 do Visual Studio estiver selecionada.

Pré-requisitos

Observação

O Visual Studio 2022 Preview é necessário porque o AOT nativo exige o link.exe e as bibliotecas de runtime estático do Visual C++. Não há planos de suporte ao AOT nativo sem o Visual Studio.

Criar um aplicativo Web com o AOT nativo

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

Execute os seguintes comandos:

dotnet new webapiaot -o MyFirstAotWebApi && cd MyFirstAotWebApi

Uma 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 por meio do AOT nativo:

dotnet publish

O comando dotnet publish:

  • Compila os arquivos de origem.
  • Gera arquivos de código-fonte compilados.
  • Passa assemblies gerados para um compilador de IL nativo. O compilador de IL produz o executável nativo. O executável nativo contém o código do computador nativo.

Uma 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 ser diferente do exemplo anterior, dependendo da versão do .NET 8 usada, do diretório usado e de outros fatores.

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

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

Uma 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 é contido em si mesmo e não requer um runtime do .NET para ser executado. Quando iniciado, ele se comporta da mesma forma que o aplicativo executado no ambiente de desenvolvimento. Execute o aplicativo de AOT:

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

Uma 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 do ASP.NET Core atualmente têm alguns problemas de compatibilidade quando usadas em um projeto voltado para o AOT Nativo, como:

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

As bibliotecas que usam esses recursos dinâmicos precisam ser atualizadas para funcionar com o AOT Nativo. Elas podem ser atualizadas usando ferramentas como geradores de origem Roslyn.

Os autores da biblioteca que desejam dar suporte ao AOT nativo são incentivados a:

Veja também