gRPC 和本机 AOT

作者:James Newton-King

gRPC 在 .NET 8 中支持 .NET 本机预先 (AOT)。 本机 AOT 允许将 gRPC 客户端和服务器应用发布为小型、快速的本机可执行文件。

警告

在 .NET 8 中,并非所有 ASP.NET Core 功能都与本机 AOT 兼容。 有关详细信息,请参阅 ASP.NET Core 和本机 AOT 兼容性

入门

发布应用时会发生 AOT 编译。 本机 AOT 是使用 PublishAot 选项启用的。

  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 发布的应用:

  • 最大程度减少了磁盘占用空间
  • 缩短了启动时间
  • 减少了内存需求

有关本机 AOT 提供的优势的详细信息和示例,请参阅将本机 AOT 与 ASP.NET Core 配合使用的优势

其他资源