Native AOT (NAOT)
Eintrag zuletzt aktualisiert am: 20.11.2023
Native
AOT ist der
Ahead-of-Time-Compiler, den Microsoft in
.NET 7.0 eingeführt hat als Alternative zum
Just-in-Time-Compiler.
.NET bietet seit Version 7.0 erstmals den schon seit einigen Jahren angekündigten
Ahead-of-Time-Compiler für .NET an, der zur Entwicklungszeit Maschinencode erzeugt und keinen
Just-in-Time-Compiler, der zur Laufzeit Intermediate Language in Maschinencode übersetzt, mehr benötigt.
- Auch für Minimal WebAPI, gRPC und Worker Services
- Weiterhin o.g. Einschränkungen
Native AOT aktivieren
- Mit <PublishAot>true</PublishAot> in der Projektdatei
- Seit .NET 8.0 mit --aot beim Anlegen eines Projekts bzw. per Projektvorlage in Visual Studio:
dotnet new console --aot
dotnet new api --aot
dotnet new grpc --aot
dotnet new worker --aot
Weitere Hinweise zu Native AOT
- Optimierungsziele vom Entwickler konfigurierbar (Size | Speed), z.B. <IlcOptimizationPreference>Speed</IlcOptimizationPreference>
- Das Kompilieren mit Native AOT dauert deutlich länger und funktioniert bisher nur mit Konsolenprojekten.
- Native AOT verwendet Tree Shaking (Application Trimming)
- Das Ergebnis ist eine einzige ausführbare Datei, die alle notwendigen Teile der .NET-Laufzeitumgebung enthält (self-contained, single File).
- Es gibt darin weiterhin eine Runtime mit Garbage Collector, aber keinen Just-in-Timer-Compiler
- Die Ausführbare Datei ist spezifische für ein Betriebssystem und eine Prozessorarchitektur (z.B. win-x86 oder linux-x64)
- Erfordert zusätzliche Build-Werkzeuge
Windows:
Visual Studio C++-Werkzeuge
Linux: Clang
MacOS: Xcode