教學課程:使用原生 AOT 發佈 ASP.NET Core 應用程式
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 部署的必要條件。
已安裝使用 C++ 的桌面開發工作負載的 Visual Studio 2022 預覽版。
注意
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 的程式庫作者: