分享方式:


gRPC 和原生 AOT

作者:James Newton-King

gRPC 支援 .NET 8 中的 .NET 原生的預先編譯(AOT)。 原生 AOT 可讓您將 gRPC 用戶端和伺服器應用程式發佈為小型、快速的原生可執行檔。

警告

在 .NET 8 中,並非所有 ASP.NET Core 功能都與原生 AOT 相容。 如需詳細資訊,請參閱 ASP.NET Core 和 Native AOT 相容性

開始吧

發佈應用程式時,會發生 AOT 編譯。 您可以透過選項 PublishAot 啟用原生 AOT。

  1. 將 新增 <PublishAot>true</PublishAot> 至 gRPC 用戶端或伺服器應用程式的項目檔。 這會在發佈期間啟用原生 AOT 編譯,並在建置和編輯期間啟用動態程式代碼使用分析。

    <Project Sdk="Microsoft.NET.Sdk.Web">
    
      <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <PublishAot>true</PublishAot>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="Grpc.AspNetCore" Version="2.51.0" />
        <PackageReference Include="Google.Protobuf" Version="3.22.0" />
      </ItemGroup>
    
    </Project>
    

    您也可以使用 ASP.NET Core gRPC 樣本來指定 --aot 選項來啟用原生 AOT:

    dotnet new grpc --aot
    
  2. 使用 dotnet publish -r <RID>發佈特定運行時間識別碼 (RID) 的應用程式。

應用程式可在發佈目錄中取得,並包含其中執行所需的所有程序代碼。

原生 AOT 分析包含應用程式的所有程式碼,以及應用程式依賴的程式庫。 檢視原生 AOT 警告並採取糾正措施。 最好經常測試發佈應用程式,以在開發生命週期早期發現問題。

優化發佈大小

原生 AOT 可執行檔只包含支援應用程式所需的外部相依性程式碼。 未使用的程式代碼會自動修剪。

使用 建立主機產生器 WebApplication.CreateSlimBuilder(),即可優化 ASP.NET Core gRPC 服務的發行大小。 此產生器提供執行 ASP.NET Core 應用程式所需的最少功能清單。

var builder = WebApplication.CreateSlimBuilder(args);
builder.Services.AddGrpc();

var app = builder.Build();
app.MapGrpcService<GreeterService>();
app.Run();

使用原生 AOT 的優點

使用原生 AOT 發佈的應用程式具有:

  • 最小化的磁碟使用量
  • 縮短啟動時間
  • 減少記憶體需求

如需 Native AOT 提供之優點的詳細資訊和範例,請參閱 搭配使用原生 AOT 與 ASP.NET Core 的優點

其他資源