Share via


教學課程:使用原生 AOT 發佈 ASP.NET 核心應用程式

ASP.NET Core 8.0 推出 .NET 原生預先 (AOT) 的支援。

注意

  • 原生 AOT 功能目前為預覽狀態。
  • 在 .NET 8 中,並非所有 ASP.NET Core 功能都與原生 AOT 相容。
  • .NET Core CLIVisual Studio 指示會提供索引標籤:
    • 即使已選取 [CLI] 索引標籤,Visual Studio 也是必要條件。
    • 即使已選取 [Visual Studio] 索引標籤,CLI 也必須用來發佈。

必要條件

注意

需要 Visual Studio 2022 Preview,因為原生 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 的連結庫作者:

另請參閱