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

ASP.NET Core 8.0 предоставляет поддержку .NET native перед временем (AOT).

Примечание.

  • Функция AOT в собственном коде в настоящее время доступна в предварительной версии.
  • В .NET 8 не все функции ASP.NET Core совместимы с машинным AOT.
  • Вкладки предоставляются для команд командной строки .NET Core и Visual Studio :
    • Visual Studio является обязательным условием, даже если выбрана вкладка CLI.
    • Интерфейс командной строки должен использоваться для публикации, даже если выбрана вкладка Visual Studio.

Необходимые компоненты

Примечание.

Требуется предварительная версия Visual Studio 2022, так как для машинного 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

Убедитесь, что приложение можно опубликовать с помощью Собственного 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. При запуске приложение работает так же, как и в среде разработки. Запустите приложение 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, в настоящее время имеют некоторые проблемы совместимости при использовании в проекте, предназначенных для собственного AOT, например:

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

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

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

См. также