Esercitazione: Pubblicare un'app ASP.NET Core con AOT nativo

.NET Native ahead-of-time (AOT) è disponibile in ASP.NET Core.

Nota

Le API minime non sono compatibili con AOT nativo.

Per altre informazioni, vedere Distribuzione AOT nativa, tra cui:

Prerequisiti

Nota

Visual Studio 2022 è necessario perché Native AOT richiede link.exe e le librerie di runtime statiche di Visual C++. Non sono previsti piani per supportare l'AOT nativo senza Visual Studio.

Creare un'app Web con AOT nativo

Creare un'applicazione API ASP.NET Core configurata per funzionare con AOT nativo:

Eseguire i comandi seguenti:

dotnet new webapiaot -o MyFirstAotWebApi && cd MyFirstAotWebApi

Viene visualizzato un output simile all'esempio seguente:

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.

Pubblicare l'app AOT nativa

Verificare che l'app possa essere pubblicata con AOT nativo:

dotnet publish

Comando dotnet publish:

  • Compila i file di origine.
  • Genera file di codice sorgente compilati.
  • Passa gli assembly generati a un compilatore IL nativo. Il compilatore IL produce l'eseguibile nativo. L'eseguibile nativo contiene il codice nativo del computer.

Viene visualizzato un output simile all'esempio seguente:

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\

L'output può differire dall'esempio precedente a seconda della versione di .NET 8 usata, della directory usata e di altri fattori.

Esaminare il contenuto della directory di output:

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

Viene visualizzato un output simile all'esempio seguente:

    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

L'eseguibile è indipendente e non richiede l'esecuzione di un runtime .NET. Al momento dell'avvio, si comporta come l'app eseguita nell'ambiente Development . Eseguire l'app AOT:

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

Viene visualizzato un output simile all'esempio seguente:

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

Usare librerie con Native AOT

Molte librerie comuni usate nei progetti ASP.NET Core presentano attualmente alcuni problemi di compatibilità quando sono incorporati in progetti destinati a AOT nativo, ad esempio:

  • Uso della reflection per esaminare e individuare i tipi
  • Caricamento condizionale delle librerie in fase di esecuzione
  • Generazione di codice in tempo reale per implementare la funzionalità

Le librerie che usano queste funzionalità dinamiche richiedono aggiornamenti per l'uso con AOT nativo. Sono disponibili vari strumenti per l'applicazione degli aggiornamenti necessari, ad esempio i generatori di origine Roslyn.

Gli autori di librerie che sperano di supportare Native AOT sono invitati a esaminare gli articoli seguenti:

Vedere anche