Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Publikování aplikace jako nativní AOT vytvoří aplikaci, která je samostatná a která byla předem zkompilována do nativního kódu. Nativní aplikace AOT mají rychlejší spouštění a menší nároky na paměť. Tyto aplikace se můžou spouštět na počítačích, na kterých není nainstalovaný modul runtime .NET.
Výhoda Native AOT je nejvýznamnější pro úlohy s velkým počtem nasazených instancí, jako je cloudová infrastruktura a hyperškálovatelné služby. .NET 8 přidává podporu ASP.NET Core pro nativní AOT.
Model nasazení Native AOT používá ahead-of-time kompilátor ke kompilaci IL do nativního kódu při publikaci. Nativní aplikace AOT při spuštění aplikace nepoužívají kompilátor JIT (just-in-time). Nativní aplikace AOT se můžou spouštět v omezených prostředích, kde není povolený JIT. Nativní aplikace AOT cílí na konkrétní běhové prostředí, jako je Linux x64 nebo Windows x64, stejně jako publikování samostatné aplikace.
Požadavky
Visual Studio 2022, včetně vývoje desktopových aplikací s úlohou C++ se všemi výchozími komponentami
Publikování nativní AOT pomocí rozhraní příkazového řádku
Přidejte
<PublishAot>true</PublishAot>do souboru projektu.Tato vlastnost umožňuje nativní kompilaci AOT během publikování. Umožňuje také dynamickou analýzu využití kódu během sestavování a úprav. Toto nastavení je vhodnější umístit do souboru projektu místo jeho předání na příkazový řádek, protože řídí chování mimo publikování.
<PropertyGroup> <PublishAot>true</PublishAot> </PropertyGroup>Publikujte aplikaci pro konkrétní identifikátor modulu runtime pomocí
dotnet publish -r <RID>.Následující příklad publikuje aplikaci pro Windows jako nativní aplikaci AOT na počítači s nainstalovanými požadovanými požadavky.
dotnet publish -r win-x64 -c ReleaseNásledující příklad publikuje aplikaci pro Linux jako nativní aplikaci AOT. Nativní binární soubor AOT vytvořený na počítači s Linuxem bude fungovat jenom na stejné nebo novější verzi Linuxu. Například nativní binární soubor AOT vytvořený v Ubuntu 20.04 bude běžet na Ubuntu 20.04 a novější, ale nebude spuštěn na Ubuntu 18.04.
dotnet publish -r linux-arm64 -c Release
Aplikace je k dispozici v publikačním adresáři a obsahuje veškerý kód potřebný ke spuštění, včetně ořezané verze modulu runtime coreclr.
Projděte si nativní ukázky AOT dostupné v úložišti dotnet/samples na GitHubu. Ukázky zahrnují soubory Linux a Windows Dockerfile, které ukazují, jak automatizovat instalaci požadovaných součástí a publikovat projekty .NET s nativní AOT pomocí kontejnerů.
Analyzátory kompatibility AOT
Vlastnost IsAotCompatible slouží k označení, zda je knihovna kompatibilní s nativní AOT. Zvažte, kdy knihovna nastaví IsAotCompatible vlastnost na true, například:
<PropertyGroup>
<IsAotCompatible>true</IsAotCompatible>
</PropertyGroup>
Předchozí konfigurace přiřadí výchozí hodnotu true následujícím vlastnostem:
IsTrimmableEnableTrimAnalyzerEnableSingleFileAnalyzerEnableAotAnalyzer
Tyto analyzátory pomáhají zajistit, aby knihovna byla kompatibilní s nativní AOT.
Nativní informace o ladění
Publikování AOT v nativním režimu ve výchozím nastavení generuje informace pro ladění do samostatného souboru.
- Linux: .dbg
- Windows: .pdb
- macOS: Složka .dSYM
Ladicí soubor je nezbytný pro spuštění aplikace v ladicím programu nebo prohlížení výpisů chyb. Na platformách podobných Unixu nastavte StripSymbols vlastnost na false pro zahrnutí ladicích informací v nativním binárním souboru. Zahrnutí informací o ladění zvětší nativní binární soubor.
<PropertyGroup>
<StripSymbols>false</StripSymbols>
</PropertyGroup>
Omezení nativního nasazení AOT
Nativní aplikace AOT mají následující omezení:
- Žádné dynamické načítání, například
Assembly.LoadFile. - Žádné generování kódu modulu runtime, například
System.Reflection.Emit. - Žádné C++/CLI.
- Windows: Žádné integrované COM.
- Vyžaduje ořezání, které má omezení.
- Implikuje kompilaci do jednoho souboru, který má známé nekompatibility.
- Aplikace zahrnují požadované knihovny modulu runtime (stejně jako samostatné aplikace, čímž se v porovnání s aplikacemi závislými na architektuře zvětšují).
- System.Linq.Expressions vždy používejte interpretovanou podobu, která je pomalejší než zkompilovaný kód vygenerovaný za běhu.
- Obecné parametry nahrazené argumenty typu struktury mají specializovaný kód vygenerovaný pro každou instanci. V dynamickém modulu runtime se generuje mnoho instancí na vyžádání. V nativní AOT jsou všechny instance předem předgenerovány. To může mít významný dopad na velikost disku aplikace. Obecné virtuální metody a obecné instanční metody budou mít taktéž instanci pro každý typ, který implementuje nebo přepisuje.
- Ne všechny knihovny modulu runtime jsou plně anotovány tak, aby byly nativní kompatibilní s AOT. To znamená, že koncoví vývojáři nemůžou provádět některá upozornění v knihovnách modulu runtime.
- Podpora diagnostiky pro ladění a profilaci s určitými omezeními
- Podpora některých funkcí ASP.NET Core Další informace najdete v tématu ASP.NET Podpora jádra pro nativní AOT.
Proces publikování analyzuje celý projekt a jeho závislosti pro možná omezení. Upozornění se vydávají pro každé omezení, se kterým se může publikovaná aplikace setkat za běhu.
Omezení platformy a architektury
Následující tabulka uvádí podporované cíle kompilace.
| Platforma | Podporovaná architektura | Poznámky |
|---|---|---|
| Windows | x64, Arm64 | |
| Operační systém Linux | x64, Arm64 | |
| macOS | x64, Arm64 | |
| Ios | Arm64 | Experimentální podpora |
| iOSSimulator | x64, Arm64 | Experimentální podpora |
| tvOS | Arm64 | Experimentální podpora |
| tvOSSimulator | x64, Arm64 | Experimentální podpora |
| MacCatalyst | x64, Arm64 | Experimentální podpora |
| Android | x64, Arm64 | Experimentální, žádná integrovaná spolupráce v Javě |
Další informace o tom, jak je konkrétní platforma podporována v nativním AOT, najdete na odkazu v tabulce.