Partager via


Tutoriel : Publier une application ASP.NET Core à l’aide d’AOT 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é AOT native est actuellement en préversion.
  • Dans .NET 8, toutes les fonctionnalités ASP.NET Core ne sont pas compatibles avec Native AOT.
  • Des onglets sont prévus pour les instructions .NET CLI 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é.

Conditions préalables

Remarque

Visual Studio 2022 est requis, car AOT natif nécessite link.exe et les bibliothèques de runtime statique Visual C++. Il n'est pas prévu de prendre en charge Native AOT sans Visual Studio.

Créer une application web avec AOT natif

Créez une application API core ASP.NET configurée pour fonctionner avec Native AOT :

Exécutez les commandes suivantes :

dotnet new webapiaot -o MyFirstAotWebApi && cd MyFirstAotWebApi

La sortie similaire à l’exemple suivant s’affiche :

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 AOT native

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

dotnet publish

Commande dotnet publish :

  • Compile les fichiers sources.
  • Génère des fichiers de code source compilés.
  • Transmet des assemblages 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.

La sortie similaire à l’exemple suivant s’affiche :

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

La sortie similaire à l’exemple suivant s’affiche :

    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’exécutable est autonome et ne nécessite pas d’exécution d’un runtime .NET. 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

La sortie similaire à l’exemple suivant s’affiche :

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 AOT native

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 native AOT, 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 utilisant ces fonctionnalités dynamiques doivent être mises à jour afin d’utiliser Native AOT. Ils peuvent être mis à jour à l’aide d’outils tels que les générateurs de sources Roslyn.

Les auteurs de bibliothèque qui espèrent prendre en charge l’AOT native sont encouragés à :

Voir aussi