Dela via


Självstudie: Publicera en ASP.NET Core-app med inbyggd AOT

.NET native ahead-of-time (AOT) är tillgängligt i ASP.NET Core.

Anmärkning

Minimala API:er är inte kompatibla med inbyggd AOT.

Mer information finns i Ursprunglig AOT-distribution, inklusive:

Förutsättningar

Anmärkning

Visual Studio 2022 krävs eftersom Native AOT kräver link.exe och Visual C++ statiska runtime-bibliotek. Det finns inga planer på att stödja intern AOT utan Visual Studio.

Skapa en webbapp med intern AOT

Skapa en ASP.NET Core API-app som är konfigurerad för att fungera med intern AOT:

Kör följande kommandon:

dotnet new webapiaot -o MyFirstAotWebApi && cd MyFirstAotWebApi

Utdata som liknar följande exempel visas:

The template "ASP.NET Core Web API (Native AOT)" was created successfully.

Processing post-creation actions...
Restoring C:\Code\Demos\MyFirstAotWebApi\MyFirstAotWebApi.csproj:
  Determining projects to restore...
  Restored C:\Code\Demos\MyFirstAotWebApi\MyFirstAotWebApi.csproj (in 302 ms).
Restore succeeded.

Publicera den infödda AOT-appen

Kontrollera att appen kan publiceras med Native AOT:

dotnet publish

Kommandot dotnet publish:

  • Kompilerar källfilerna.
  • Genererar källkodsfiler som kompileras.
  • Skickar genererade sammansättningar till en intern IL-kompilator. IL-kompilatorn producerar det ursprungliga körbara programmet. Den inhemska körbara filen innehåller den inhemska maskinkoden.

Utdata som liknar följande exempel visas:

MSBuild version 17.<version> for .NET
  Determining projects to restore...
  Restored C:\Code\Demos\MyFirstAotWebApi\MyFirstAotWebApi.csproj (in 241 ms).
C:\Code\dotnet\aspnetcore\.dotnet\sdk\8.0.<version>\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.RuntimeIde
ntifierInference.targets(287,5): message NETSDK1057: You are using a preview version of .NET. See: https://aka.ms/dotne
t-support-policy [C:\Code\Demos\MyFirstAotWebApi\MyFirstAotWebApi.csproj]
  MyFirstAotWebApi -> C:\Code\Demos\MyFirstAotWebApi\bin\Release\net8.0\win-x64\MyFirstAotWebApi.dll
  Generating native code
  MyFirstAotWebApi -> C:\Code\Demos\MyFirstAotWebApi\bin\Release\net8.0\win-x64\publish\

Utdata kan skilja sig från föregående exempel beroende på vilken version av .NET 8 som används, vilken katalog som används och andra faktorer.

Granska innehållet i utdatakatalogen:

dir bin\Release\net8.0\win-x64\publish

Utdata som liknar följande exempel visas:

    Directory: C:\Code\Demos\MyFirstAotWebApi\bin\Release\net8.0\win-x64\publish

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
-a---          30/03/2023  1:41 PM        9480704 MyFirstAotWebApi.exe
-a---          30/03/2023  1:41 PM       43044864 MyFirstAotWebApi.pdb

Den körbara filen är fristående och kräver ingen .NET-runtime för att fungera. När den startas fungerar den på samma sätt som appen körs i utvecklingsmiljön. Kör AOT-appen:

.\bin\Release\net8.0\win-x64\publish\MyFirstAotWebApi.exe

Utdata som liknar följande exempel visas:

info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://localhost:5000
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Production
info: Microsoft.Hosting.Lifetime[0]
      Content root path: C:\Code\Demos\MyFirstAotWebApi

Bibliotek och egenkompilerad AOT

Många av de populära bibliotek som används i ASP.NET Core-projekt har för närvarande vissa kompatibilitetsproblem när de används i ett projekt som riktar sig till intern AOT, till exempel:

  • Använd reflektion för att inspektera och identifiera typer.
  • Villkorlig inläsning av bibliotek vid exekvering.
  • Generera kod i farten för att implementera funktioner.

Bibliotek som använder dessa dynamiska funktioner måste uppdateras för att fungera med intern AOT. De kan uppdateras med hjälp av verktyg som Roslyn-källgeneratorer.

Biblioteksförfattare som hoppas kunna stödja native AOT uppmuntras att:

Se även