Tutorial: Veröffentlichen einer ASP.NET Core-App mit nativer AOT-Kompilierung

.NET Native Ahead-of-Time (AOT) ist in ASP.NET Core verfügbar.

Anmerkung

Minimale APIs sind nicht mit systemeigenen AOT kompatibel.

Unter Native AOT-Bereitstellung finden Sie weitere Informationen, einschließlich:

Voraussetzungen

Anmerkung

Visual Studio 2022 ist erforderlich, da Native AOT link.exe sowie die statischen Laufzeitbibliotheken von Visual C++ benötigt. Es gibt keine Pläne, systemeigene AOT ohne Visual Studio zu unterstützen.

Erstellung einer Webanwendung mit nativem AOT

Erstellen Sie eine ASP.NET Core-API-App, die für die Arbeit mit nativem AOT konfiguriert ist:

Führen Sie die folgenden Befehle aus:

dotnet new webapiaot -o MyFirstAotWebApi && cd MyFirstAotWebApi

Dadurch werden Informationen angezeigt, die mit denen der folgenden Ausgabe vergleichbar sind:

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.

Veröffentlichen der nativen AOT-App

Überprüfen Sie, ob die App mithilfe von Native AOT veröffentlicht werden kann:

dotnet publish

Der Befehl dotnet publish:

  • Kompiliert die Quelldateien.
  • Generiert Quellcodedateien, die kompiliert werden.
  • Übergibt generierte Assemblys an einen nativen IL-Compiler. Der IL-Compiler erzeugt die native ausführbare Datei. Die native ausführbare Datei enthält den nativen Computercode.

Dadurch werden Informationen angezeigt, die mit denen der folgenden Ausgabe vergleichbar sind:

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\

Die Ausgabe kann vom vorherigen Beispiel abhängig von der verwendeten Version von .NET 8, dem verwendeten Verzeichnis und anderen Faktoren abweichen.

Überprüfen Sie den Inhalt des Ausgabeverzeichnisses:

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

Dadurch werden Informationen angezeigt, die mit denen der folgenden Ausgabe vergleichbar sind:

    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

Die ausführbare Datei ist eigenständig und erfordert keine .NET-Laufzeit, um ausgeführt zu werden. Beim Starten verhält es sich genauso wie die App, die in der Development Umgebung ausgeführt wird. Führen Sie die AOT-App aus:

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

Dadurch werden Informationen angezeigt, die mit denen der folgenden Ausgabe vergleichbar sind:

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

Bibliotheken mit nativem AOT verwenden

Viele beliebte Bibliotheken, die in ASP.NET Core Projekten verwendet werden, weisen derzeit einige Kompatibilitätsprobleme auf, wenn sie in Projekte integriert werden, die auf native AOT abzielen, z. B.:

  • Verwenden von Spiegelung zum Untersuchen und Ermitteln von Typen
  • Bedingtes Laden von Bibliotheken zur Laufzeit
  • Generieren von Code im Handumdrehen zur Implementierung von Funktionalität

Bibliotheken, die diese dynamischen Features verwenden, erfordern Updates für die Arbeit mit nativem AOT. Es stehen verschiedene Tools zum Anwenden der erforderlichen Updates zur Verfügung, z. B. Roslyn-Quellgeneratoren.

Bibliotheksautoren, die hoffen, native AOT zu unterstützen, werden ermutigt, die folgenden Artikel zu lesen:

Weitere Informationen