Native AOT در داتنت چیست؟
کامپایل کردن برنامه داتنت مستقیم به کد ماشین بومی هنگام Build (Ahead-of-Time)، بدون نیاز به JIT یا نصب Runtime داتنت روی سرور مقصد.
چرا مهم است؟
Native AOT زمان استارتاپ برنامه را بهشدت کاهش میدهد و اندازه نهایی را کوچکتر میکند — مهم برای Serverless/Container که هر میلیثانیه استارتاپ و هر مگابایت Image اهمیت دارد.
تعریف
بهصورت پیشفرض، برنامه داتنت به IL (زبان میانی) کامپایل و هنگام اجرا توسط JIT به کد ماشین تبدیل میشود؛ با Native AOT، این تبدیل هنگام Build انجام میشود و خروجی یک فایل اجرایی مستقل و بومی است.
فعالسازی
<!-- .csproj -->
<PropertyGroup>
<PublishAot>true</PublishAot>
</PropertyGroup>
dotnet publish -c Release
مزایا
- استارتاپ بسیار سریعتر: مناسب Serverless (Azure Functions) و Containerهای Scale-to-Zero.
- Image کوچکتر: بدون نیاز به کل Runtime داتنت داخل Container.
- مصرف حافظه کمتر.
محدودیتها
- Reflection پویا (مثلاً بعضی سناریوهای Serialization قدیمی) محدود یا نیازمند تنظیم اضافه است.
- همه کتابخانههای شخص ثالث هنوز کاملاً سازگار با AOT نیستند؛ باید تست شود.
اشتباه رایج
❌ فعالکردن Native AOT برای یک برنامه بزرگ با وابستگی سنگین به Reflection پویا (مثل بعضی ORMها یا فریمورکهای قدیمیتر) بدون تست کامل — ممکن است برنامه Build شود اما هنگام اجرا با خطای Runtime مربوط به Reflection مواجه شود؛ همیشه بعد از فعالسازی AOT، کل مسیرهای اصلی برنامه را تست کنید.
منبع و مطالعه بیشتر
خلاصه
Native AOT برنامه داتنت را هنگام Build مستقیم به کد ماشین بومی کامپایل میکند، با استارتاپ سریعتر و Image کوچکتر، مناسب Serverless/Container. بعد از فعالسازی، حتماً کل مسیرهای اصلی برنامه (بهخصوص Reflection) را تست کنید. مرجع کامل: Native AOT deployment، Microsoft Learn.
