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
- Der native AOT befindet sich derzeit in der Vorschauphase.
- In .NET 8 sind nicht alle ASP.NET Core-Features mit nativem AOT kompatibel.
- Registerkarten werden für die .NET 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
Unter Linux finden Sie Voraussetzungen für die native AOT-Bereitstellung.
Visual Studio 2022 Preview mit installierter Workload Desktopentwicklung mit C++
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 natives 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 zu funktionieren. Sie können mithilfe von Tools wie Roslyn-Quellgeneratoren aktualisiert werden.
Bibliotheksautoren, die natives AOT unterstützen möchten, wird Folgendes empfohlen:
- Lesen Sie mehr über die Kompatibilitätsanforderungen für natives AOT.
- Bereiten Sie die Bibliothek für das Kürzen vor.
Siehe auch
- ASP.NET Core-Unterstützung für native AOT-Kompilierung
- Native AOT-Bereitstellung
- Verwenden des Quell-Generators für die Konfigurationsbindung
- Die minimale AOT-Kompilierungsvorlage der API
- Vergleichen von
WebApplication.CreateBuilder
mitCreateSlimBuilder
- Erkunden des neuen minimalen API-Quell-Generators
- Ersetzen von Methodenaufrufen durch Interceptors
- Quell-Generator für Konfigurationsbindung