首页 > 解决方案 > 从其他项目 protobuf 文件导入消息类型

问题描述

我试图以一种方式构建我的 proto 文件,当我构建到各种语言时,我包含的 proto 文件是公开可用的。我已经尝试过import public "webrtc/signaling.proto",它删除了“未使用”消息,但是当我使用命令时,RTCMessage 的消息类型仍然不包含在我的 c# build Mafia.cs 中,./protoc.exe -I=G:/MafiaProject/MafiaProtobuf/protofiles --csharp_out=G:/MafiaProject/MafiaProtobuf/csharp_out G:/MafiaProject/MafiaProtobuf/protofiles/mafia.proto但在我为 go 构建时似乎包含在内。

syntax = "proto3";
option go_package = "github.com/rgeorgeoff/webRTCProto";
package webrtc;

enum ReqType {
  SDP = 0;
  ICE = 1;
}

message RTCMessage {
  ReqType req_type = 1;
  bytes data = 2;
}

在上面的目录 mafia.proto 中:

syntax = "proto3";
option go_package = "github.com/rgeorgeoff/SlimePartyGoServer/protobuf3";
package mafia;
import "webrtc/signaling.proto";

... other definitions...

我只希望消息类型/枚举在我的构建中的构建文件(python/go/etc)中可用。我是否还必须为 c# 单独构建所有文件并单独复制它们?

标签: c#goprotocol-buffersprotoc

解决方案


您应该将 proto 文件的所有路径作为输入参数传递给 protoc 命令,例如:

protoc -I="."/MafiaProject/MafiaProtobuf/protofiles --csharp_out="."/MafiaProject/MafiaProtobuf/csharp_out MafiaProject/MafiaProtobuf/protofiles/.proto MafiaProject/MafiaProtobuf/ protofiles/webrtc/ .proto

考虑如下树结构:

MafiaProject
└── MafiaProtobuf
    ├── csharp_out
    │   ├── Mafia.cs
    │   └── Signaling.cs
    └── protofiles
        ├── mafia.proto
        └── webrtc
            └── signaling.proto

推荐阅读