Partager via


Tutoriel : publier une application ASP.NET Core à l'aide de l’AOA natif

ASP.NET Core 8.0 introduit la prise en charge pour l’avance de temps (AOT, ahead-of-time) native .NET.

Remarque

  • La fonctionnalité d’AOA natif est actuellement en préversion.
  • Dans .NET 8, toutes les fonctionnalités ASP.NET Core ne sont pas compatibles avec l’AOA natif.
  • Les onglets sont fournis pour les instructions de l’interface de ligne de commande .NET et Visual Studio :
    • Visual Studio est un prérequis même si l’onglet CLI est sélectionné.
    • L’interface CLI doit être utilisée pour publier même si l’onglet Visual Studio est sélectionné.

Prérequis

Remarque

La préversion de Visual Studio 2022 est requise, car l’AOA natif nécessite link.exe et les bibliothèques de runtime statique Visual C++. Il n’est pas prévu de prendre en charge l’AOA natif sans Visual Studio.

Créer une application web avec l’AOA natif

Créer une application API ASP.NET Core configurée pour fonctionner avec l’AOA natif :

Exécutez les commandes suivantes :

dotnet new webapiaot -o MyFirstAotWebApi && cd MyFirstAotWebApi

Une sortie similaire à l’exemple suivant s’affiche à l’écran :

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.

Publier l’application d’AOA natif

Vérifiez que l’application peut être publiée à l’aide de l’AOA natif :

dotnet publish

La commande dotnet publish :

  • Compile les fichiers sources.
  • Génère des fichiers de code source compilés.
  • Transmet les assemblys générés à un compilateur IL natif. Le compilateur IL produit l’exécutable natif. L’exécutable natif contient le code de l’ordinateur natif.

Une sortie similaire à l’exemple suivant s’affiche à l’écran :

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\

La sortie peut différer de l’exemple précédent en fonction de la version de .NET 8 utilisée, du répertoire utilisé et d’autres facteurs.

Passez en revue le contenu du répertoire de sortie :

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

Une sortie similaire à l’exemple suivant s’affiche à l’écran :

    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

Le fichier exécutable est autonome et ne nécessite pas de runtime .NET pour s’exécuter. Lors du lancement, il se comporte de la même façon que l’application exécutée dans l’environnement de développement. Exécutez l’application AOT :

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

Une sortie similaire à l’exemple suivant s’affiche à l’écran :

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

Bibliothèques et AOA natif

La plupart des bibliothèques populaires utilisées dans les projets ASP.NET Core présentent actuellement des problèmes de compatibilité lorsqu’elles sont utilisées dans un projet ciblant l’AOA natif, par exemple :

  • Utilisation de la réflexion pour inspecter et découvrir des types.
  • Chargement conditionnel de bibliothèques au moment de l’exécution.
  • Génération de code à la volée pour implémenter des fonctionnalités.

Les bibliothèques qui utilisent ces fonctionnalités dynamiques doivent être mises à jour pour fonctionner avec l’AOA natif. Elles peuvent être mises à jour à l’aide d’outils tels que les générateurs de sources Roslyn.

Les auteurs de bibliothèques qui espèrent prendre en charge l’AOA natif sont invités à :

Voir aussi