チュートリアル: ネイティブ AOT を使用して ASP.NET Core アプリを発行する
ASP.NET Core 8.0 では、.NET ネイティブ Ahead-Of-Time (AOT) のサポートが導入されています。
注意
- ネイティブ AOT の機能は現在プレビュー段階です。
- .NET 8 では、すべての ASP.NET Core 機能がネイティブ AOT と互換性を持つわけではありません。
- 以下のように、.NET CLI と Visual Studio の手順用のタブが存在します。
- [CLI] タブが選択されている場合でも、Visual Studio は前提として必要です。
- [Visual Studio] タブを選択した場合でも、CLI を使用して発行する必要があります。
前提条件
Linux の場合は、「ネイティブ AOT デプロイの前提条件」を参照してください。
C++ によるデスクトップ開発ワークロードがインストールされた Visual Studio 2022 Preview。
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 のサポートを希望するライブラリ作成者には、次のことをおすすめします。
関連項目
ASP.NET Core