Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Menerbitkan aplikasi Anda sebagai Native AOT menghasilkan aplikasi yang mandiri dan telah dikompilasi terlebih dahulu (AOT) ke kode asli. Aplikasi AOT asli memiliki waktu mulai yang lebih cepat dan jejak memori yang lebih kecil. Aplikasi ini dapat berjalan pada komputer yang tidak menginstal runtime .NET.
Manfaat Native AOT paling signifikan untuk beban kerja dengan jumlah instans yang tinggi, seperti infrastruktur cloud dan layanan skala hiper. .NET 8 menambahkan dukungan ASP.NET Core untuk AOT asli.
Model penyebaran Native AOT menggunakan kompilator ahead-of-time untuk mengkompilasi IL ke kode asli pada waktu penerbitan. Aplikasi AOT asli tidak menggunakan kompilator just-in-time (JIT) saat aplikasi berjalan. Aplikasi AOT asli dapat berjalan di lingkungan terbatas di mana JIT tidak diizinkan. Aplikasi AOT asli menargetkan lingkungan runtime tertentu, seperti Linux x64 atau Windows x64, sama seperti menerbitkan aplikasi mandiri.
Prasyarat
Visual Studio 2022 atau yang lebih baru, termasuk pengembangan Desktop dengan beban kerja C++ dengan semua komponen default.
Menerbitkan Native AOT menggunakan CLI
Tambahkan
<PublishAot>true</PublishAot>ke file proyek Anda.Properti ini memungkinkan kompilasi AOT Asli pada saat penerbitan. Ini juga memungkinkan analisis penggunaan kode dinamis selama build dan pengeditan. Lebih baik menempatkan pengaturan ini dalam file proyek daripada meneruskannya pada baris perintah, karena mengontrol perilaku di luar publikasi.
<PropertyGroup> <PublishAot>true</PublishAot> </PropertyGroup>Terbitkan aplikasi untuk pengidentifikasi runtime tertentu menggunakan
dotnet publish -r <RID>.Contoh berikut mempublikasikan aplikasi untuk Windows sebagai aplikasi Native AOT pada komputer dengan prasyarat yang diperlukan terinstal.
dotnet publish -r win-x64 -c ReleaseContoh berikut mempublikasikan aplikasi untuk Linux sebagai aplikasi Native AOT. Biner Native AOT yang diproduksi di komputer Linux hanya akan berfungsi pada versi Linux yang sama atau lebih baru. Misalnya, biner AOT asli yang diproduksi pada Ubuntu 20.04 akan berjalan pada Ubuntu 20.04 dan yang lebih baru, tetapi tidak akan berjalan pada Ubuntu 18.04.
dotnet publish -r linux-arm64 -c Release
Aplikasi ini tersedia di direktori publikasi dan berisi semua kode yang diperlukan untuk dijalankan di dalamnya, termasuk versi runtime coreclr yang dilucuti.
Lihat Native AOT samples yang tersedia di repositori dotnet/samples di GitHub. Sampelnya termasuk Linux dan Windows Dockerfiles yang menunjukkan cara mengotomatiskan penginstalan prasyarat dan menerbitkan proyek .NET dengan Native AOT menggunakan kontainer.
Penganalisis kompatibilitas AOT
Properti IsAotCompatible ini digunakan untuk menunjukkan apakah pustaka kompatibel dengan AOT Asli. Pertimbangkan kapan pustaka mengatur properti ke IsAotCompatibletrue, misalnya:
<PropertyGroup>
<IsAotCompatible>true</IsAotCompatible>
</PropertyGroup>
Konfigurasi terdahulu menetapkan true sebagai default untuk properti berikut:
IsTrimmableEnableTrimAnalyzerEnableSingleFileAnalyzerEnableAotAnalyzer
Penganalisis ini membantu memastikan bahwa pustaka kompatibel dengan AOT Asli.
Verifikasi rakitan yang dirujuk kompatibel dengan AOT
Saat mengaktifkan analisis AOT untuk pustaka, Anda dapat memilih untuk mengaktifkan verifikasi bahwa semua asembli yang dirujuk juga ditandai untuk kompatibilitas AOT dengan mengatur properti VerifyReferenceAotCompatibility ke true:
<PropertyGroup>
<IsAotCompatible>true</IsAotCompatible>
<VerifyReferenceAotCompatibility>true</VerifyReferenceAotCompatibility>
</PropertyGroup>
Ketika properti ini diaktifkan, penganalisis memperingatkan tentang assembly yang direferensikan yang tidak memiliki metadata IsAotCompatible. Ini membantu memastikan bahwa semua dependensi dalam proyek Anda dianotasikan untuk kompatibilitas Native AOT. Peringatan yang dipancarkan adalah IL3058.
Verifikasi ini bersifat sukarela karena:
- Tidak semua pustaka yang kompatibel dengan AOT telah diperbarui dan menyertakan metadata
IsAotCompatible. - Peringatan dapat berisik jika Anda memiliki banyak dependensi yang berfungsi dengan benar dengan Native AOT tetapi tidak ditandai secara eksplisit sebagai demikian.
Nota
Metadata perakitan IsAotCompatible diperkenalkan dalam .NET 10. Pustaka yang telah diterbitkan dan ditargetkan untuk versi .NET lama tidak akan memiliki atribut ini, meskipun dibuat dengan <IsAotCompatible>true</IsAotCompatible>.
Pertimbangkan untuk mengaktifkan verifikasi ini saat Anda ingin memastikan bahwa semua dependensi Anda secara eksplisit ditandai sebagai kompatibel dengan AOT oleh penulisnya.
Informasi debug bawaan
Secara bawaan, penerbitan AOT Asli menghasilkan informasi debug dalam file terpisah.
- Linux: .dbg
- Windows: .pdb
- macOS: folder .dSYM
File debug diperlukan untuk menjalankan aplikasi di bawah debugger atau memeriksa crash dump. Pada platform seperti Unix, atur StripSymbols ke false untuk menyertakan informasi debug dalam binary asli. Termasuk informasi debug membuat biner asli lebih besar.
<PropertyGroup>
<StripSymbols>false</StripSymbols>
</PropertyGroup>
Batasan penerapan AOT Native
Aplikasi AOT asli memiliki batasan berikut:
- Tidak ada pemuatan dinamis, misalnya,
Assembly.LoadFile. - Tidak ada pembuatan kode runtime, misalnya,
System.Reflection.Emit. - Tidak ada C++/CLI.
- Windows: Tidak ada COM bawaan.
- Membutuhkan pemangkasan, yang mempunyai batasan.
- Menyiratkan penggabungan menjadi satu file, yang memiliki ketidaksesuaian yang sudah diketahui.
- Aplikasi menyertakan pustaka runtime yang diperlukan (sama seperti aplikasi mandiri, sehingga ukurannya lebih besar dibandingkan dengan aplikasi yang bergantung pada framework).
- System.Linq.Expressions selalu gunakan formulir yang ditafsirkan, yang lebih lambat dari runtime yang dihasilkan kode yang dikompilasi.
- Parameter generik yang diganti dengan argumen jenis struktur memiliki kode khusus yang dihasilkan untuk setiap instans. Dalam runtime dinamis, banyak instansiasi dihasilkan sesuai permintaan. Di Native AOT, semua instansiasi telah dibuat sebelumnya. Ini dapat berdampak signifikan pada ukuran disk aplikasi. Metode virtual generik dan metode instans generik juga akan memiliki instansiasi untuk setiap jenis implementasi atau penggantian.
- Tidak semua pustaka runtime diberi anotasi sepenuhnya agar kompatibel dengan Native AOT. Artinya, beberapa peringatan di pustaka runtime tidak dapat ditindaklanjuti oleh pengembang akhir.
- Dukungan diagnostik untuk penelusuran kesalahan dan pembuatan profil dengan beberapa batasan.
- Dukungan untuk beberapa fitur ASP.NET Core. Untuk informasi selengkapnya, lihat dukungan ASP.NET Core untuk AOT Asli.
Proses penerbitan menganalisis seluruh proyek dan dependensinya untuk kemungkinan batasan. Peringatan dikeluarkan untuk setiap batasan yang mungkin dihadapi oleh aplikasi yang sudah dipublikasikan selama runtime.
Pembatasan platform/arsitektur
Tabel berikut ini memperlihatkan target kompilasi yang didukung.
| Plattform | Arsitektur yang didukung | Catatan |
|---|---|---|
| Windows | x64, Arm64 | |
| Linux | x64, Arm64 | |
| macOS | x64, Arm64 | |
| Ios | Arm64 | Dukungan eksperimental |
| iOSSimulator | x64, Arm64 | Dukungan eksperimental |
| tvOS | Arm64 | Dukungan eksperimental |
| tvOSSimulator | x64, Arm64 | Dukungan eksperimental |
| MacCatalyst | x64, Arm64 | Dukungan eksperimental |
| Android | x64, Arm64 | Eksperimental, tidak ada interop Java bawaan |
Untuk informasi lebih lanjut tentang dukungan platform tertentu dengan Native AOT, silakan ikuti tautan yang terdapat dalam tabel.