Share via


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

In ASP.NET Core 8.0 wird Unterstützung für native .NET-AOT-Kompilierung (Ahead-Of-Time) eingeführt.

Hinweis

  • Das native AOT-Feature befindet sich derzeit in der Vorschau.
  • In .NET 8 sind nicht alle ASP.NET Core-Features mit nativer AOT-Kompilierung kompatibel.
  • Registerkarten werden für die .NET Core CLI- und Visual Studio-Anweisungen bereitgestellt:
    • Visual Studio ist eine Voraussetzung, auch wenn die CLI-Registerkarte ausgewählt ist.
    • Die CLI muss zudem zum Veröffentlichen verwendet werden, auch wenn die Visual Studio-Registerkarte ausgewählt ist.

Voraussetzungen

Hinweis

Visual Studio 2022 Preview ist erforderlich, da systemeigene AOT link.exe und die statischen Laufzeitbibliotheken von Visual C++ erfordert. Es gibt keine Pläne, systemeigene AOT ohne Visual Studio zu unterstützen.

Erstellen einer Web-App mit nativer AOT

Erstellen Sie eine ASP.NET Core-API-App, die für die Verwendung mit nativer AOT-Kompilierung 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 mit nativer AOT veröffentlicht werden kann:

dotnet publish

Mit dem 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 je nach verwendeter Version von .NET 8, verwendetem Verzeichnis und anderen Faktoren vom vorherigen Beispiel 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-Runtime für die Ausführung. Beim Starten verhält sie sich genauso wie die App, die in der Entwicklungsumgebung 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 und native AOT-Kompilierung

Viele der beliebten Bibliotheken, die in ASP.NET Core-Projekten verwendet werden, weisen derzeit einige Kompatibilitätsprobleme auf, wenn sie in einem Projekt für native AOT verwendet werden, z. B.:

  • Verwendung der Reflektion zum Untersuchen und Ermitteln von Typen.
  • Bedingtes Laden von Bibliotheken zur Laufzeit.
  • Automatisches Generieren von Code zum Implementieren von Funktionen.

Bibliotheken, die diese dynamischen Features verwenden, müssen aktualisiert werden, um mit nativem AOT arbeiten zu können. Sie können mithilfe von Tools wie Roslyn-Quellgeneratoren aktualisiert werden.

Bibliotheksautoren, die native AOT unterstützen möchten, werden zu folgenden Aufgaben aufgefordert:

Siehe auch