Seit .NET 8 kann mit AOT (Ahead-Of-Time) eine Web-App für ein bestimmtes Hostsystem (z.B. Windows, Ubuntu, Mac) vor kompiliert werden.
Dadurch startet die Anwendung schneller und benötigt weniger Speicher.
Es wird außerdem keine .NET Runtime auf dem Zielsystem benötigt.
Wie funktioniert AOT?
Zunächst mal muss die Anwendung, die Beschränkungen für die Veröffentlichung einer AOT Anwendung berücksichtigen. Diese können durch den Code Analyser geprüft werden wenn IsAotCompatible auf true gesetzt wird. Hierzu sollten neben den Errors auch die Warnings berücksichtigt werden, um unerwünschtes Verhalten zu verhindern.
<PropertyGroup>
<PublishAot>true</PublishAot>
<IsAotCompatible>true</IsAotCompatible>
</PropertyGroup>Dann kann die Anwendung durch dotnet publish mit AOT in vor kompilierter Form veröffentlicht werden.
dotnet publish -r linux-arm64 -c Release
#ODER
dotnet publish -r win-x64 -c ReleaseWie funktioniert die Kompilierung ohne AOT?
Ohne AOT wird beim Ausführen von dotnet build der Quellcode in eine Zwischensprache (Common Intermediate Language, auch als CIL bekannt) übersetzt, welche von der .NET Runtime (CLR) und dem zugehörigen JIT- Compiler verstanden und fortlaufend optimiert wird. Hierzu wandelt der JIT-Compiler zur Laufzeit den CIL Code, in nativen Code des Hostsystems um.
Mehr dazu: https://learn.microsoft.com/de-de/dotnet/standard/managed-execution-process
Wann macht AOT Sinn?
AOT erschwert aufgrund der Beschränkungen die Entwicklung, weshalb AOT besonders Sinn macht, wenn die Anwendung schnell gestartet werden muss.
Das ist insbesondere bei Anwendungen der Fall, die entweder häufig geschlossen und wieder geöffnet werden (z.B. Notepad) oder als skalierbare Instanz automatisiert hoch und wieder heruntergefahren werden (z.B. bei Microservices in der Cloud).
