Neu in .NET 7.0 [17]: Ahead-of-Time-Compiler für Konsolenanwendungen
Der von Microsoft lange Zeit angekündigte Ahead-of-Time-Compiler "Native-AOT" lässt sich erstmalig in .NET 7 nutzen – zumindest in Konsolenprojekten.
In .NET 7.0 können Entwicklerinnen und Entwickler erstmalig den schon seit einigen Jahren angekündigten, aber immer wieder verschobenen Ahead-of-Time-Compiler (AOT) für .NET nutzen, der zur Entwicklungszeit Maschinencode erzeugt. Der "Native-AOT" genannte Compiler löst den bisherigen Just-in-Time-Compiler (JIT), der zur Laufzeit Intermediate Language in Maschinencode übersetzt, nicht ab, sondern stellt eine ergänzende Alternative dar – wie die folgende Abbildung verdeutlicht.
Bisher gab es in .NET nur AOT-Kompilierung für Blazor WebAssembly nach WebAssembly-Bytecode (seit .NET 6.0) [1] und die in .NET Core 3.0 eingeführte CrossGen-Technik [2], bei der eine Assembly partiell schon zur Entwicklungszeit vorkompiliert wird, aber dennoch den gesamten Intermediate Code mitliefert (siehe linke Seite in der Abbildung).
Bedingungen für Native-AOT
Das Kompilieren mit Native-AOT ist nur möglich, wenn es keine Laufzeitcodegenerierung (Reflection Emit), kein dynamisches Assembly-Nachladen mit Assembly.LoadFile(), Assembly.LoadFrom() oder Ähnliches sowie keine Zugriffe auf COM- und WinRT-APIs gibt. Auch das Verwenden von C++/CLI ist nicht möglich. Das Kompilieren dauert deutlich länger und funktioniert in .NET 7.0 zunächst nur mit Konsolenprojekten.
Da immer eine Single-File-Assembly entsteht, funktionieren alle Basisklassenfunktionen nicht, die Einschränkungen bei Single-File-Assemblies [3] haben, beispielsweise Assembly.GetFile(), Assembly.Location, Assembly.CodeBase, Module.Name und weitere.
Mit .NET 8.0 erscheint die nächste Long-Time-Support-Version. Am 21. November 2023 bietet die von Heise und www.IT-Visions.de präsentierte Online-Konferenz betterCode() .NET 8.0 [4] das Rüstzeug, sich einen grundlegenden Überblick zu .NET 8.0 zu verschaffen. Die Expertenvorträge [5] zeigen die Neuerungen in .NET 8.0, ASP.NET Core 8.0, Blazor 8.0, .NET MAUI, C# 12.0 und mehr. Vier ganztägige Workshops [6] vermitteln Hands-on-Wissen.
Aktivieren von Native-AOT
Native-AOT lässt sich mit dem Eintrag <PublishAot>true</PublishAot>
in der Projektdatei aktivieren. Danach ist eine Veröffentlichung mit Runtime Identifier möglich, beispielsweise folgendermaßen:
dotnet publish -r win-x64 -c Release
oder
dotnet publish -r linux-arm64 -c Release
Ausblick
Im nächsten Teil dieser Serie, der in der kommenden Woche erscheinen wird, geht es um die Geschwindigkeit von AOT-kompilierten Anwendungen im Vergleich zu Anwendungen mit JIT.
(map [7])
URL dieses Artikels:
https://www.heise.de/-9180987
Links in diesem Artikel:
[1] https://www.heise.de/news/BUILD-2021-NET-6-Preview-4-mit-Werkzeugen-fuer-MAUI-6054078.html
[2] https://www.heise.de/news/Microsoft-laeutet-mit-NET-Core-3-0-und-C-8-0-neues-Zeitalter-ein-4535758.html
[3] https://learn.microsoft.com/en-us/dotnet/core/deploying/single-file/overview?tabs=cli#api-incompatibility
[4] https://net.bettercode.eu
[5] https://net.bettercode.eu/index.php#programm
[6] https://net.bettercode.eu/index.php#workshops
[7] mailto:map@ix.de
Copyright © 2023 Heise Medien