Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Het publiceren van uw app als systeemeigen AOT- produceert een app die zelfstandig is en die vooraf gecompileerd is naar systeemeigen code. Systeemeigen AOT-apps hebben snellere opstarttijd en kleinere geheugenvoetafdrukken. Deze apps kunnen worden uitgevoerd op computers waarop de .NET Runtime niet is geïnstalleerd.
Het voordeel van Native AOT is het meest significant voor workloads met een groot aantal ingezette exemplaren, zoals cloudinfrastructuur en hyperscale-diensten. .NET 8 voegt ASP.NET Core-ondersteuning toe voor systeemeigen AOT-.
Het systeemeigen AOT-implementatiemodel maakt gebruik van een vooraf geschreven compiler om IL te compileren naar systeemeigen code op het moment van publiceren. Systeemeigen AOT-apps gebruiken geen Just-In-Time-compiler (JIT) wanneer de toepassing wordt uitgevoerd. Systeemeigen AOT-apps kunnen worden uitgevoerd in beperkte omgevingen waar een JIT niet is toegestaan. Systeemeigen AOT-toepassingen richten zich op een specifieke runtime-omgeving, zoals Linux x64 of Windows x64, net als bij het publiceren van een zelfstandige app.
Benodigdheden
Visual Studio 2022, inclusief de Desktop-ontwikkeling met C++ workload met alle standaardonderdelen.
Systeemeigen AOT publiceren met behulp van de CLI
Voeg
<PublishAot>true</PublishAot>
toe aan uw projectbestand.Met deze eigenschap wordt systeemeigen AOT-compilatie ingeschakeld tijdens het publiceren. Het maakt ook dynamische analyse van codegebruik mogelijk tijdens het bouwen en bewerken. Het verdient de voorkeur om deze instelling in het projectbestand te plaatsen in plaats van deze door te geven op de opdrachtregel, omdat het gedrag regelt buiten het publiceren.
<PropertyGroup> <PublishAot>true</PublishAot> </PropertyGroup>
Publiceer de app voor een specifieke runtime-id met behulp van
dotnet publish -r <RID>
.In het volgende voorbeeld wordt de app voor Windows gepubliceerd als een systeemeigen AOT-toepassing op een computer waarop de vereiste vereisten zijn geïnstalleerd.
dotnet publish -r win-x64 -c Release
In het volgende voorbeeld wordt de app voor Linux gepubliceerd als een systeemeigen AOT-toepassing. Een systeemeigen AOT-binair bestand dat op een Linux-computer wordt geproduceerd, werkt alleen op dezelfde of nieuwere Linux-versie. Systeemeigen AOT-binair geproduceerd op Ubuntu 20.04 wordt bijvoorbeeld uitgevoerd op Ubuntu 20.04 en hoger, maar wordt niet uitgevoerd op Ubuntu 18.04.
dotnet publish -r linux-arm64 -c Release
De app is beschikbaar in de publicatiemap en bevat alle code die nodig is om erin uit te voeren, inclusief een stripped down-versie van de coreclr-runtime.
Bekijk de Native AOT-voorbeelden beschikbaar in de dotnet/samples-repository op GitHub. De voorbeelden omvatten Linux- en Windows Dockerfiles die laten zien hoe u de installatie van vereisten automatiseert en .NET-projecten publiceert met systeemeigen AOT met behulp van containers.
AOT-compatibiliteitsanalyses
De eigenschap IsAotCompatible
wordt gebruikt om aan te geven of een bibliotheek compatibel is met systeemeigen AOT. Overweeg wanneer een bibliotheek de eigenschap IsAotCompatible
instelt op true
, bijvoorbeeld:
<PropertyGroup>
<IsAotCompatible>true</IsAotCompatible>
</PropertyGroup>
Met de voorgaande configuratie wordt een standaardwaarde van true
toegewezen aan de volgende eigenschappen:
IsTrimmable
EnableTrimAnalyzer
EnableSingleFileAnalyzer
EnableAotAnalyzer
Deze analyses helpen ervoor te zorgen dat een bibliotheek compatibel is met systeemeigen AOT.
Systeemeigen foutopsporingsgegevens
Standaard produceert systeemeigen AOT-publicatie foutopsporingsgegevens in een afzonderlijk bestand:
- Linux: .dbg
- Windows: .pdb-
- macOS: map .dSYM
Het foutopsporingsbestand is nodig voor het uitvoeren van de app onder het foutopsporingsprogramma of het inspecteren van crashdumps. Stel op Unix-achtige platforms de eigenschap StripSymbols
in op false
om de foutopsporingsgegevens in het systeemeigen binaire bestand op te nemen. Als u foutopsporingsinformatie opgeeft, wordt het systeemeigen binaire bestand groter.
<PropertyGroup>
<StripSymbols>false</StripSymbols>
</PropertyGroup>
Beperkingen van systeemeigen AOT-implementatie
Systeemeigen AOT-apps hebben de volgende beperkingen:
- Geen dynamisch laden, bijvoorbeeld
Assembly.LoadFile
. - Er is geen runtime-codegeneratie, bijvoorbeeld
System.Reflection.Emit
. - Geen C++/CLI.
- Windows: Geen ingebouwde COM.
- Vereist bijsnijden, wat beperkingen heeft.
- Impliceert compilatie in één bestand, dat bekend is incompatibiliteit.
- Apps bevatten vereiste runtimebibliotheken (net als zelfstandige apps, waardoor hun grootte wordt verhoogd in vergelijking met frameworkafhankelijke apps).
- System.Linq.Expressions altijd hun geïnterpreteerde formulier gebruiken, wat langzamer is dan de runtime gegenereerde gecompileerde code.
- Algemene parameters die worden vervangen door typeargumenten van het structtype, zullen gespecialiseerde code hebben gegenereerd bij elke aanroep. In de dynamische runtime worden veel instantiations gegenereerd op aanvraag. In Native AOT worden alle instantiëringen vooraf gegenereerd. Dit kan aanzienlijke gevolgen hebben voor de schijfgrootte van de toepassing. Algemene virtuele methoden en algemene exemplaarmethoden zullen ook een instantiering hebben voor elk implementatie- of overschrijdingstype.
- Niet alle runtimebibliotheken worden volledig geannoteerd om systeemeigen AOT-compatibel te zijn. Dat wil gezegd, sommige waarschuwingen in de runtimebibliotheken kunnen niet worden uitgevoerd door eindontwikkelaars.
- Diagnostische ondersteuning voor foutopsporing en profilering met enkele beperkingen.
- Ondersteuning voor sommige ASP.NET Core-functies. Voor meer informatie, zie ASP.NET Core-ondersteuning voor systeemeigen AOT.
Het publicatieproces analyseert het hele project en de bijbehorende afhankelijkheden voor mogelijke beperkingen. Er worden waarschuwingen gegeven voor elke beperking die de gepubliceerde app kan tegenkomen tijdens de runtime.
Beperkingen voor platform/architectuur
In de volgende tabel ziet u ondersteunde compilatiedoelen.
Platvorm | Ondersteunde architectuur | Opmerkingen |
---|---|---|
Ramen | x64, Arm64 | |
Linux | x64, Arm64 | |
macOS | x64, Arm64 | |
Ios | Arm64 | Experimentele ondersteuning |
iOSSimulator | x64, Arm64 | Experimentele ondersteuning |
tvOS | Arm64 | Experimentele ondersteuning |
tvOSSimulator | x64, Arm64 | Experimentele ondersteuning |
MacCatalyst | x64, Arm64 | Experimentele ondersteuning |
Androïde | x64, Arm64 | Experimenteel, geen ingebouwde Java-interoperabiliteit |
Volg de koppeling in de tabel voor meer informatie over hoe specifiek platform wordt ondersteund met Native AOT.