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.

In .NET 7.0

In .NET 8.0

  • 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