【问题标题】:Importing message Types from other project protobuf files从其他项目 protobuf 文件导入消息类型
【发布时间】:2021-03-17 17:26:16
【问题描述】:

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

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# go protocol-buffers protoc


    【解决方案1】:

    您应该将 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
    

    【讨论】:

    • 是的,这行得通,谢谢。我的工作只是有一个 bash 脚本来构建一个文件,然后 bash 脚本调用 bash 脚本。真是一团糟。对于一些额外的上下文,您还可以包含多个 -I= 如果它们不在同一个根目录中! :D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 2016-12-03
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    相关资源
    最近更新 更多