チュートリアル: ネイティブ AOT を使用して ASP.NET Core アプリを発行する

ASP.NET Core 8.0 では、.NET ネイティブ Ahead-Of-Time (AOT) のサポートが導入されています。

注意

  • ネイティブ AOT の機能は現在プレビュー段階です。
  • .NET 8 では、すべての ASP.NET Core 機能がネイティブ AOT と互換性を持つわけではありません。
  • 以下のように、.NET CLIVisual Studio の手順用のタブが存在します。
    • [CLI] タブが選択されている場合でも、Visual Studio は前提として必要です。
    • [Visual Studio] タブを選択した場合でも、CLI を使用して発行する必要があります。

前提条件

Note

ネイティブ AOT には link.exe と Visual C++ 静的ランタイム ライブラリが必要であるため、Visual Studio 2022 プレビューが必要です。 Visual Studio を使用せずにネイティブ AOT をサポートする予定はありません。

ネイティブ AOT を使用して Web アプリを作成する

ネイティブ AOT で動作するように構成された ASP.NET Core API アプリを作成します。

次のコマンドを実行します。

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 のサポートを希望するライブラリ作成者には、次のことをおすすめします。

関連項目