教學課程:使用原生 AOT 發佈 ASP.NET 核心應用程式
ASP.NET Core 8.0 引進 .NET 原生預先編譯(AOT)的支援。
注意
- 原生 AOT 功能目前為預覽狀態。
- 在 .NET 8 中,並非所有 ASP.NET Core 功能都與原生 AOT 相容。
-
.NET CLI 和 Visual Studio 指示提供索引標籤:
- 即使已選取 [CLI] 索引標籤,Visual Studio 也是必要條件。
- 即使已選取 Visual Studio 索引標籤,CLI 也必須用來發佈。
先決條件
在 Linux 上,請參閱 原生 AOT 部署的必要條件。
Visual Studio 2022,已安裝 桌面開發 工作負載的 C++。
注意
需要 Visual Studio 2022,因為原生 AOT 需要 link.exe 和 Visual C++ 靜態執行程式庫。 沒有在沒有 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 相容性需求。
- 準備程式庫以進行修剪。