Samouczek: publikowanie aplikacji ASP.NET Core przy użyciu natywnej usługi AOT

ASP.NET Core 8.0 wprowadza obsługę natywnej platformy .NET przed czasem (AOT).

Uwaga

  • Natywna funkcja AOT jest obecnie dostępna w wersji zapoznawczej.
  • Na platformie .NET 8 nie wszystkie funkcje platformy ASP.NET Core są zgodne z natywną funkcją AOT.
  • Karty są dostępne dla instrukcji interfejsu wiersza polecenia platformy .NET Core i programu Visual Studio :
    • Program Visual Studio jest wymaganiem wstępnym, nawet jeśli wybrano kartę interfejsu wiersza polecenia.
    • Interfejs wiersza polecenia musi być używany do publikowania nawet w przypadku wybrania karty programu Visual Studio.

Wymagania wstępne

Uwaga

Wymagany jest program Visual Studio 2022 (wersja zapoznawcza), ponieważ natywna funkcja AOT wymaga link.exe i statycznych bibliotek środowiska uruchomieniowego visual C++. Nie ma planów obsługi natywnej AOT bez programu Visual Studio.

Tworzenie aplikacji internetowej przy użyciu natywnej usługi AOT

Utwórz aplikację interfejsu API platformy ASP.NET Core skonfigurowaną do pracy z natywną usługą AOT:

Uruchom następujące polecenia:

dotnet new webapiaot -o MyFirstAotWebApi && cd MyFirstAotWebApi

Zostaną wyświetlone dane wyjściowe podobne do następującego przykładu:

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.

Publikowanie natywnej aplikacji AOT

Sprawdź, czy można opublikować aplikację przy użyciu natywnej usługi AOT:

dotnet publish

Polecenie dotnet publish:

  • Kompiluje pliki źródłowe.
  • Generuje pliki kodu źródłowego, które są kompilowane.
  • Przekazuje wygenerowane zestawy do natywnego kompilatora IL. Kompilator IL tworzy natywny plik wykonywalny. Natywny plik wykonywalny zawiera natywny kod maszyny.

Zostaną wyświetlone dane wyjściowe podobne do następującego przykładu:

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\

Dane wyjściowe mogą różnić się od powyższego przykładu w zależności od używanej wersji platformy .NET 8, używanej katalogu i innych czynników.

Przejrzyj zawartość katalogu wyjściowego:

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

Zostaną wyświetlone dane wyjściowe podobne do następującego przykładu:

    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

Plik wykonywalny jest samodzielny i nie wymaga uruchomienia środowiska uruchomieniowego platformy .NET. Po uruchomieniu działa tak samo jak aplikacja uruchamiana w środowisku deweloperów. Uruchom aplikację AOT:

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

Zostaną wyświetlone dane wyjściowe podobne do następującego przykładu:

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

Biblioteki i natywna usługa AOT

Wiele popularnych bibliotek używanych w projektach ASP.NET Core ma obecnie pewne problemy ze zgodnością w przypadku użycia w projekcie przeznaczonym dla natywnej funkcji AOT, takich jak:

  • Używanie odbicia do sprawdzania i odnajdywania typów.
  • Warunkowe ładowanie bibliotek w czasie wykonywania.
  • Generowanie kodu na bieżąco w celu zaimplementowania funkcji.

Biblioteki korzystające z tych funkcji dynamicznych należy zaktualizować w celu pracy z natywną usługą AOT. Można je aktualizować przy użyciu narzędzi, takich jak generatory źródeł Roslyn.

Autorzy bibliotek, którzy mają nadzieję obsługiwać natywną usługę AOT, są zachęcani do:

Zobacz też