Overview
Publishing as Native AOT produces a self-contained app that has been ahead-of-time compiled into native code.
Advantages:
- Faster startup time
- Smaller memory footprint
Limitations:
- Availability:
- GA: .NET 7: Console applications only
- Preview: ASP.NET Core 8
- All limitations of trimming apply.
- All limitations of single-file deployments apply.
- No dynamic loading (
Assembly.LoadFile
) - No runtime code generation (
System.Reflection.Emit
) - Apps include required runtime libraries (like all self-contained apps), so their size is larger than framework-dependent apps.
Requirements
- On Windows, Desktop Development w/C++ workload
- On Linux, clang, zlib1g-ev
Publishing
- Update the project file:
SomeProject.csproj
<PublishAot>true</PublishAot>
- Publish the app for a specific runtime identifier:
dotnet publish -r <RUNTIME-IDENTIFIER> -c Release
Native Libraries
This capability also allows for publishing .NET class libraries that can be consumed from non-.NET languages.
AOT-Compatibility Analyzers
ℹ️ Important
Availability: .NET 8
Use the IsAotCompatible
property to provide analyzers for AOT compatibility:SomeProject.csproj
<PropertyGroup>
<IsAotCompatible>true</IsAotCompatible>
</PropertyGroup>