Search code examples
c#visual-studioprotocol-buffersgrpc

gRPC C# classes generated as empty files in Visual Studio


I have a simple .NET 6 console application where I am trying to generate c# code from a grpc proto file. The project file is as follows:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>net6.0</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
    <Nullable>enable</Nullable>
  </PropertyGroup>

  <ItemGroup>
      <Protobuf Include="Protos\greet.proto" GrpcServices="Server" />
  </ItemGroup>

  <ItemGroup>
    <PackageReference Include="Google.Protobuf" Version="3.21.9" />
    <PackageReference Include="Grpc.Net.Client" Version="2.49.0" />
    <PackageReference Include="Grpc.Tools" Version="2.50.0">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
  </ItemGroup>
</Project>

I also have a simple proto file as follows:

syntax = "proto3";

option csharp_namespace = "GrpcGreeter";

package greet;

// The greeting service definition.
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply);
}

// The request message containing the user's name.
message HelloRequest {
  string name = 1;
}

// The response message containing the greetings.
message HelloReply {
  string message = 1;
}

In relation to the proto file, when I right click on the properties of this file, all looks good:

enter image description here

However when I compile the application the GRPC types for the Greeter service are supposed to automatically get generated. However I am finding that files are getting generated but are completely empty. For example the following files are generated: enter image description here

But they are completely empty files.

Is there some obvious step that I am missing here?


Solution

  • I had created a console application. When I created a ASP.NET Core gRPC Service it solved the issue. I still dont know why a simple console application wouldnt work however