Sdílet prostřednictvím


Kurz: Publikování aplikace ASP.NET Core pomocí nativní AOT

ASP.NET Core 8.0 zavádí podporu nativního rozhraní .NET předem (AOT).

Poznámka:

  • Nativní funkce AOT je aktuálně ve verzi Preview.
  • V .NET 8 nejsou všechny funkce ASP.NET Core kompatibilní s nativní AOT.
  • Karty jsou k dispozici pro pokyny k .NET CLI a sadě Visual Studio :
    • Visual Studio je předpokladem i v případě, že je vybraná karta rozhraní příkazového řádku.
    • Rozhraní příkazového řádku se musí použít k publikování i v případě, že je vybraná karta sady Visual Studio.

Požadavky

Poznámka:

Visual Studio 2022 Preview se vyžaduje, protože nativní AOT vyžaduje link.exe a statické knihovny modulu runtime Visual C++. Bez sady Visual Studio se neplánuje podporovat nativní AOT.

Vytvoření webové aplikace pomocí nativní AOT

Vytvořte aplikaci ASP.NET Core API, která je nakonfigurovaná tak, aby fungovala s nativní AOT:

Spusťte následující příkazy:

dotnet new webapiaot -o MyFirstAotWebApi && cd MyFirstAotWebApi

Zobrazí se výstup podobný následujícímu příkladu:

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.

Publikování nativní aplikace AOT

Ověřte, že je možné aplikaci publikovat pomocí nativní AOT:

dotnet publish

Příkaz dotnet publish:

  • Zkompiluje zdrojové soubory.
  • Generuje soubory zdrojového kódu, které jsou kompilovány.
  • Předá vygenerovaná sestavení nativnímu kompilátoru IL. Kompilátor IL vytvoří nativní spustitelný soubor. Nativní spustitelný soubor obsahuje nativní kód počítače.

Zobrazí se výstup podobný následujícímu příkladu:

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\

Výstup se může lišit od předchozího příkladu v závislosti na použité verzi .NET 8, použitém adresáři a dalších faktorech.

Zkontrolujte obsah výstupního adresáře:

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

Zobrazí se výstup podobný následujícímu příkladu:

    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

Spustitelný soubor je samostatně obsažený a nevyžaduje spuštění modulu runtime .NET. Při spuštění se chová stejně jako aplikace spuštěná ve vývojovém prostředí. Spusťte aplikaci AOT:

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

Zobrazí se výstup podobný následujícímu příkladu:

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

Knihovny a nativní AOT

Mnoho oblíbených knihoven používaných v projektech ASP.NET Core má v současné době problémy s kompatibilitou při použití v projektu, který cílí na nativní AOT, například:

  • Použití reflexe ke kontrole a zjišťování typů.
  • Podmíněné načítání knihoven za běhu
  • Generování kódu za běhu pro implementaci funkcí.

Knihovny používající tyto dynamické funkce je potřeba aktualizovat, aby fungovaly s nativní AOT. Dají se aktualizovat pomocí nástrojů, jako jsou generátory zdrojů Roslyn.

Autoři knihoven, kteří chtějí podporovat nativní AOT, se doporučuje:

Viz také