Dela via


gRPC och intern AOT

Av James Newton-King

gRPC har stöd för .NET native ahead-of-time (AOT) i .NET 8. Intern AOT möjliggör publicering av gRPC-klient- och serverappar som små, snabba inbyggda körbara filer.

Varning

I .NET 8 är inte alla ASP.NET Core-funktioner kompatibla med intern AOT. Mer information finns i ASP.NET Core och intern AOT-kompatibilitet.

Kom igång

AOT-kompilering sker när appen publiceras. Native AOT är aktiverat med alternativet PublishAot .

  1. Lägg till <PublishAot>true</PublishAot> i gRPC-klientens eller serverappens projektfil. Detta aktiverar intern AOT-kompilering under publiceringen och aktiverar analys av dynamisk kodanvändning under kompilering och redigering.

    <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>
    

    Man kan också aktivera Native AOT genom att ange --aot-alternativet med ASP.NET Core gRPC-mallen.

    dotnet new grpc --aot
    
  2. Publicera appen för en specifik körningsidentifierare (RID) med hjälp av dotnet publish -r <RID>.

Appen är tillgänglig i publiceringskatalogen och innehåller all kod som behövs för att köras i den.

Intern AOT-analys innehåller all appkod och de bibliotek som appen är beroende av. Granska interna AOT-varningar och vidta korrigerande åtgärder. Det är en bra idé att testa publiceringsappar ofta för att upptäcka problem tidigt i utvecklingslivscykeln.

Optimera publiceringsstorlek

En inhemsk AOT-körbar fil innehåller bara den kod från externa beroenden som krävs för att stödja appen. Oanvänd kod trimmas automatiskt bort.

Publiceringsstorleken för en ASP.NET Core gRPC-tjänst kan optimeras genom att skapa värdverktyget med WebApplication.CreateSlimBuilder(). Den här byggaren innehåller en minimal lista över funktioner som krävs för att köra en ASP.NET Core-app.

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

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

Fördelar med att använda intern AOT

Appar som publicerats med native AOT har:

  • Minimerat diskavtryck
  • Kortare starttid
  • Minska minnesbehovet

Mer information och exempel på fördelarna med intern AOT finns i Fördelar med att använda intern AOT med ASP.NET Core.

Ytterligare resurser