Поделиться через


Руководство. Публикация приложения ASP.NET Core с помощью Native AOT

В ASP.NET Core доступен собственный собственный код .NET (AOT).

Замечание

Минимальные API несовместимы с собственным AOT.

Дополнительные сведения см. в родном развертывании AOT, в том числе:

Предпосылки

Замечание

Visual Studio 2022 требуется, так как для Native AOT требуется link.exe и Visual C++ статические библиотеки среды выполнения. Нет планов поддержки собственного AOT без Visual Studio.

Создание веб-приложения с использованием нативного AOT

Создайте приложение API ASP.NET Core, настроенное для работы с нативным AOT.

Выполните следующие команды:

dotnet new webapiaot -o MyFirstAotWebApi && cd MyFirstAotWebApi

Выходные данные, аналогичные следующему примеру, отображаются:

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.

Публикация нативного приложения AOT

Убедитесь, что приложение можно выпустить с использованием Native AOT:

dotnet publish

Команда dotnet publish делает следующее:

  • Компилирует исходные файлы.
  • Создает скомпилированные файлы исходного кода.
  • Передает созданные сборки в собственный компилятор IL. Компилятор IL создает собственный исполняемый файл. Собственный исполняемый файл содержит машинный код.

Выходные данные, аналогичные следующему примеру, отображаются:

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\

Выходные данные могут отличаться от предыдущего примера в зависимости от используемой версии .NET 8, используемой каталога и других факторов.

Просмотрите содержимое выходного каталога:

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

Выходные данные, аналогичные следующему примеру, отображаются:

    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

Исполняемый файл является автономным и не требует выполнения среды выполнения .NET. При запуске оно ведет себя так же, как и приложение, запущенное в Development среде. Запустите приложение AOT:

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

Выходные данные, аналогичные следующему примеру, отображаются:

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

Библиотеки и нативный AOT

Многие популярные библиотеки, используемые в проектах ASP.NET Core, в настоящее время имеют некоторые проблемы совместимости при использовании в проекте, нацеленном на Native AOT, например:

  • Использование отражения для проверки и обнаружения типов.
  • Условная загрузка библиотек во время выполнения программы.
  • Создание кода на лету для реализации функциональных возможностей.

Библиотеки, использующие эти динамические функции, необходимо обновить для работы с Native AOT. Их можно обновить с помощью таких средств, как генераторы источников Roslyn.

Авторам библиотек, которых призывают поддержать Native AOT, рекомендуется:

См. также