.NET Core 3.1中Protobuf生成TakGrpc.cs为空文件问题求助
问题原因与解决方案
你的TakGrpc.cs为空是因为你的.proto文件只定义了数据结构(message、enum),没有定义gRPC服务接口。Protobuf编译器只会为消息生成序列化/反序列化代码(也就是Tak.cs),只有当文件中包含service定义时,才会生成gRPC相关的服务基类和客户端代码(TakGrpc.cs)。
解决步骤
1. 在.proto文件中添加gRPC服务定义
根据你的业务场景,在现有proto代码末尾添加service块。比如针对Tak游戏的常见交互,你可以这样定义:
// 新增gRPC服务定义 service TakGameService { // 获取初始游戏状态 rpc GetInitialState(GameParameter) returns (GameState); // 执行一步棋,返回新的游戏状态 rpc MakeTurn(GameTurn) returns (GameState); }
完整的proto文件需包含原有消息定义加上这个service块。
2. 确认项目配置
- 确保该.proto文件的Build Action设置为
Protobuf compiler - 根据需求设置gRPC Stub Classes选项:
- 若要同时生成服务端基类和客户端代码,选
Client and Server - 若只做服务端,选
Server only;只做客户端则选Client only
- 若要同时生成服务端基类和客户端代码,选
3. 重新生成项目
右键项目 → 选择生成(或重新生成),此时TakGrpc.cs会自动生成包含服务基类(比如TakGameServiceBase)和客户端代码的内容,你就可以继承这个基类实现自己的服务逻辑了。
补充说明
你提到的示例Greeter Service能正常生成,是因为它的.proto文件里包含了完整的service定义(比如service Greeter { rpc SayHello (HelloRequest) returns (HelloReply); }),编译器才会生成对应的Grpc文件。
内容的提问来源于stack exchange,提问作者Willi
相关产品推荐
相关产品推荐

