gRPC 和本机 AOT
gRPC 在 .NET 8 中支持 .NET 本机预先 (AOT)。 本机 AOT 允许将 gRPC 客户端和服务器应用发布为小型、快速的本机可执行文件。
警告
在 .NET 8 中,并非所有 ASP.NET Core 功能都与本机 AOT 兼容。 有关详细信息,请参阅 ASP.NET Core 和本机 AOT 兼容性。
入门
发布应用时会发生 AOT 编译。 本机 AOT 是使用 PublishAot
选项启用的。
将
<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
使用
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 配合使用的优势。