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
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 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:
- Sich mehr über native AOT-Kompatibilitätsanforderungen zu informieren.
- 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
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für