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
No Linux, confira Pré-requisitos da implantação AOT nativo.
Visual Studio 2022 Preview com a carga de trabalho Desenvolvimento para desktop com C++ instalada.
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
- Suporte do ASP.NET Core ao AOT nativo
- Implantação do AOT nativo
- Como usar o gerador de origem do associador de configuração
- O modelo de compilação AOT de API mínima
- Comparação entre
WebApplication.CreateBuilder
eCreateSlimBuilder
- Como explorar o novo gerador de origem de API mínima
- Como substituir chamadas de método por interceptores
- Gerador de origem para configuração da associação