Delen via


Systeemeigen AOT-implementatie

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

  1. 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>
    
  2. 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.