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
- da CLI do .NET
- Visual Studio
No Linux, consulte Pré-requisitos para implantação de AOT nativo.
Visual Studio 2022 com a carga de trabalho de desenvolvimento de Desktop com C++ instalada.
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:
- da CLI do .NET
- Visual Studio
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:
- da CLI do .NET
- Visual Studio
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
- Suporte ASP.NET Core para AOT nativo
- Implantação nativa de AOT
- Usando o gerador de origem do vinculador de configuração
- O modelo de compilação AOT de API mínima
-
Comparando
WebApplication.CreateBuilder
comCreateSlimBuilder
- Explorando o novo gerador de código-fonte de API mínimo
- Substituindo chamadas de método por Interceptors
- Gerador de fonte de vinculação de configuração