Esercitazione: Pubblicare un'app ASP.NET Core con AOT nativo
ASP.NET Core 8.0 introduce il supporto per .NET Native ahead-of-time (AOT).
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 di Visual Studio :
- Visual Studio è un prerequisito anche se è selezionata la scheda dell'interfaccia della riga di comando.
- L'interfaccia della riga di comando deve essere usata per pubblicare anche se è selezionata la scheda di Visual Studio.
Prerequisiti
In Linux, vedere Prerequisiti per la distribuzione nativa di AOT.
Visual Studio 2022 Preview con il carico di lavoro Sviluppo di applicazioni desktop con C++ installato.
Nota
Visual Studio 2022 Preview è necessario perché AOT nativo richiede link.exe e le librerie di runtime statiche di Visual C++. Non sono previsti piani per il supporto di AOT nativo senza Visual Studio.
Creare un'app Web con AOT nativo
Creare un'app per le API core ASP.NET configurata per l'uso 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
Il 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 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 devono essere aggiornate per lavorare con AOT nativo. Possono essere aggiornati usando strumenti come generatori di origine Roslyn.
Gli autori di librerie che sperano di supportare native AOT sono invitati a:
- Informazioni sui requisiti di compatibilità AOT nativi.
- Preparare la libreria per tagliare.
Vedi anche
- supporto di ASP.NET Core per AOT nativo
- Distribuzione AOT nativa
- Uso del generatore di origine del gestore di associazione di configurazione
- Modello di compilazione AOT api minimo
- Confronto con
WebApplication.CreateBuilder
CreateSlimBuilder
- Esplorazione del nuovo generatore di origine API minimo
- Sostituzione delle chiamate di metodo con intercettori
- Generatore di origini con associazione della configurazione