Condividi tramite


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

ASP.NET Core 8.0 introduce il supporto per .NET native .

Nota

  • La funzionalità AOT nativa è attualmente in anteprima.
  • In .NET 8, non tutte le funzionalità di ASP.NET Core sono compatibili con Native AOT.
  • Le schede sono disponibili per le istruzioni dell'interfaccia della riga di comando di .NET e Visual Studio:
    • Visual Studio è un prerequisito anche se è selezionata la scheda della CLI.
    • La CLI deve essere usata per pubblicare anche nel caso in cui sia selezionata la scheda di Visual Studio.

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 di sviluppo. 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

Librerie e AOT nativo

Molte delle librerie più diffuse usate nei progetti ASP.NET Core presentano attualmente alcuni problemi di compatibilità quando vengono usati in un progetto destinato a AOT nativo, ad esempio:

  • Uso della riflessione per esaminare e scoprire 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 devono essere aggiornate per lavorare con AOT nativo. Possono essere aggiornati utilizzando strumenti come i generatori di codice sorgente di Roslyn.

Gli autori di librerie che sperano di supportare native AOT sono invitati a:

Vedere anche