チュートリアル: ネイティブ 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 デプロイの
前提条件に関する記事を参照してください。 Visual Studio 2022 には C++ デスクトップ開発用の ワークロードがインストールされています。
手記
ネイティブ 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 をサポートすることを希望するライブラリ作成者には、次のことをお勧めします。
- ネイティブAOTの互換性要件について読んでください。
- トリミング用にライブラリを準備します。
関連項目
ASP.NET Core