Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Az alkalmazás natív AOT- közzétételével létrejön egy olyan alkalmazás, amely önálló, és amely natív kódra lett lefordítva. A natív AOT-alkalmazások gyorsabb indítási idővel és kisebb memóriaigényekkel rendelkeznek. Ezek az alkalmazások olyan gépeken is futtathatók, amelyeken nincs telepítve a .NET-futtatókörnyezet.
A natív AOT előnye a nagy számú üzembe helyezett példánnyal rendelkező számítási feladatok, például a felhőinfrastruktúra és a hiperskálázási szolgáltatások esetében a legjelentősebb. A .NET 8 a natív AOT-ASP.NET Core-támogatását adja hozzá.
A natív AOT-alapú üzemi modell egy előre elkészített fordítóval fordítja le az IL-t natív kódra a közzététel időpontjában. A natív AOT-alkalmazások nem használnak igény szerinti (JIT) fordítót az alkalmazás futtatásakor. A natív AOT-alkalmazások olyan korlátozott környezetekben is futtathatók, ahol a JIT nem engedélyezett. A natív AOT-alkalmazások egy adott futtatókörnyezetet céloznak meg, például a Linux x64-et vagy a Windows x64-et, ugyanúgy, mint egy önálló alkalmazás közzététele.
Előfeltételek
Visual Studio 2022 vagy újabb verzió, beleértve az asztali fejlesztést C++ számítási feladattal az összes alapértelmezett összetevővel.
Natív AOT közzététele a parancssori felület használatával
Adja hozzá
<PublishAot>true</PublishAot>a projektfájlhoz.Ez a tulajdonság lehetővé teszi a natív AOT-fordítást a közzététel során. Emellett lehetővé teszi a dinamikus kódhasználat-elemzést a buildelés és a szerkesztés során. Célszerű ezt a beállítást a projektfájlba helyezni ahelyett, hogy a parancssorba továbbítanák, mivel a közzétételen kívüli viselkedést vezérli.
<PropertyGroup> <PublishAot>true</PublishAot> </PropertyGroup>Tegye közzé az alkalmazást egy adott futtatókörnyezet-azonosítóhoz a
dotnet publish -r <RID>használatával.Az alábbi példa a Windows alkalmazást natív AOT-alkalmazásként teszi közzé egy olyan gépen, amelyen telepítve vannak a szükséges előfeltételek.
dotnet publish -r win-x64 -c ReleaseAz alábbi példa natív AOT-alkalmazásként teszi közzé a Linuxhoz készült alkalmazást. A Linux gépen előállított Natív AOT bináris fájlok csak ugyanazon vagy újabb Linux-verzión fognak működni. Az Ubuntu 20.04-en előállított Natív AOT bináris fájl például az Ubuntu 20.04-en és újabb verziókon fog futni, de az Ubuntu 18.04-en nem fog futni.
dotnet publish -r linux-arm64 -c Release
Az alkalmazás elérhető a közzétételi könyvtárban, és tartalmazza a futtatáshoz szükséges összes kódot, beleértve a coreclr-futtatókörnyezet lecsupaszított verzióját is.
Tekintse meg az natív AOT-mintákat, a GitHub dotnet/samples adattárában. A minták közé tartoznak Linux- és Windows Dockerfile-fájlok, amelyek bemutatják, hogyan automatizálható az előfeltételek telepítése, és hogyan tehet közzé .NET-projekteket natív AOT használatával tárolók használatával.
AOT-kompatibilitási elemzők
A IsAotCompatible tulajdonság jelzi, hogy egy kódtár kompatibilis-e a natív AOT-jal. Fontolja meg, hogy egy könyvtár mikor állítja be a IsAotCompatible tulajdonságot true-re, például:
<PropertyGroup>
<IsAotCompatible>true</IsAotCompatible>
</PropertyGroup>
Az előző konfiguráció a következő tulajdonságokhoz rendeli hozzá az alapértelmezett true:
IsTrimmableEnableTrimAnalyzerEnableSingleFileAnalyzerEnableAotAnalyzer
Ezek az elemzők segítenek biztosítani, hogy a kódtár kompatibilis legyen a natív AOT-jal.
Ellenőrizze, hogy a hivatkozott szerelvények AOT-kompatibilisek-e
Ha engedélyezi az AOT-elemzést egy könyvtárhoz, akkor opcionálisan engedélyezheti annak ellenőrzését is, hogy az összes hivatkozott összeállítás AOT-kompatibilitás szempontjából is meg van jelölve, ha a VerifyReferenceAotCompatibility tulajdonságot true értékre állítja.
<PropertyGroup>
<IsAotCompatible>true</IsAotCompatible>
<VerifyReferenceAotCompatibility>true</VerifyReferenceAotCompatibility>
</PropertyGroup>
Ha ez a tulajdonság engedélyezve van, az elemző figyelmeztet minden olyan hivatkozott szerelvényekre, amelyek nem rendelkeznek a IsAotCompatible metaadatokkal. Ez segít biztosítani, hogy a projekt összes függősége natív AOT-kompatibilis legyen. A kibocsátott figyelmeztetés: IL3058.
Ez az ellenőrzés azért van engedélyezve, mert:
- Nem minden AOT-kompatibilis kódtár lett frissítve, hogy tartalmazza a
IsAotCompatiblemetaadatokat. - A figyelmeztetés lehet zajos, ha sok olyan függősége van, amelyek megfelelően működnek a Native AOT technológiával, de nincsenek kifejezetten megjelölve.
Megjegyzés:
A IsAotCompatible szerelvény metaadatai a .NET 10-ben jelentek meg. A .NET korábbi verzióira célzottan közzétett könyvtárak nem rendelkeznek ezzel az attribútummal, még akkor sem, ha azokat a <IsAotCompatible>true</IsAotCompatible> használatával építették fel.
Érdemes engedélyezni ezt az ellenőrzést, ha meg szeretné győződni arról, hogy a szerzők kifejezetten AOT-kompatibilisként jelölik meg az összes függőséget.
Natív hibakeresési információk
Alapértelmezés szerint a natív AOT-közzététel hibakeresési információkat hoz létre egy külön fájlban:
- Linux: .dbg
- Windows: .pdb
- macOS: .dSYM mappa
A hibakeresési fájlra szükség van az alkalmazás hibakereső alatt való futtatásához, vagy az összeomlási naplókvizsgálatához. Unix-szerű platformokon állítsa a StripSymbols tulajdonságot false a hibakeresési információk natív bináris fájlba történő belefoglalásához. A hibakeresési információk is nagyobbá teszik a natív bináris adatokat.
<PropertyGroup>
<StripSymbols>false</StripSymbols>
</PropertyGroup>
Natív AOT-telepítés korlátozásai
A natív AOT-alkalmazásokra a következő korlátozások vonatkoznak:
- Nincs dinamikus betöltés, például
Assembly.LoadFile. - Nincs futtatókörnyezeti kód generálása, például
System.Reflection.Emit. - Nincs C++/CLI.
- Windows: Nincs beépített COM.
- A vágásra vonatkozóan korlátozásokérvényesek.
- Egyetlen fájlba való fordítást jelent, amelynek ismert inkompatibilitásai vannak.
- Az alkalmazások tartalmazzák a szükséges futtatókörnyezeti kódtárakat (csakúgy, mint önálló alkalmazások, amelyek mérete a keretrendszertől függő alkalmazásokhoz képest növekszik).
- System.Linq.Expressions mindig használja az értelmezett űrlapot, amely lassabb, mint a futtatókörnyezet által generált lefordított kód.
- A struct típusú argumentumokkal helyettesített általános paraméterek minden példányhoz speciális kódot hoznak létre. A dinamikus futtatókörnyezetben számos példány jön létre igény szerint. A Natív AOT-ban minden példány előre létre lesz hozva. Ez jelentős hatással lehet az alkalmazás lemezméretére. Az általános virtuális metódusok és az általános példány metódusok is rendelkeznek példányosítással minden implementálási vagy felülírási típushoz.
- Nem minden futásidejű könyvtár van teljes mértékben megjegyzésekkel ellátva, hogy natív AOT-kompatibilis legyen. Ez azt jelzi, hogy a futtatókörnyezeti kódtárak egyes figyelmeztetéseit a végfelhasználók nem hajtják végre.
- Diagnosztikai támogatás hibakereséshez és profilkészítéshez bizonyos korlátozásokkal.
- Néhány ASP.NET Core-funkció támogatása. További információkért lásd: ASP.NET Core támogatása a Natív AOT-hoz.
A közzétételi folyamat elemzi a teljes projektet és annak függőségeit a lehetséges korlátozások érdekében. Figyelmeztetések jelennek meg minden olyan korlátozáshoz, amelyet a közzétett alkalmazás futásidőben tapasztalhat.
Platform-/architektúrakorlátozások
Az alábbi táblázat a támogatott fordítási célokat mutatja be.
| Platforma | Támogatott architektúra | Jegyzetek |
|---|---|---|
| Windows | x64, Arm64 | |
| Linux | x64, Arm64 | |
| macOS | x64, Arm64 | |
| Ios | Arm64 | Kísérleti támogatás |
| iOSSimulator | x64, Arm64 | Kísérleti támogatás |
| tvOS- | Arm64 | Kísérleti támogatás |
| tvOSSimulator | x64, Arm64 | Kísérleti támogatás |
| MacCatalyst | x64, Arm64 | Kísérleti támogatás |
| Android | x64, Arm64 | Kísérleti, nincs beépített Java-interop |
A natív AOT által támogatott platformokkal kapcsolatos további információkért kövesse a táblázat hivatkozását.