【问题标题】:Protobuf Importing Message from another proto C# projectsProtobuf 从另一个 proto C# 项目导入消息
【发布时间】:2020-09-07 08:05:23
【问题描述】:

我在 C# .NET Standard 项目 MyProject 中使用 Google.Protobuf.Tools。我有多个原型定义。

MyProject/Protos/Requests/SampleRequest.proto

syntax = "proto3";

option csharp_namespace = "My.Projects.Protos.Requests";


package sampleRequests;

message SampleRequest {
   int32 requestNumber =1;
   SubRequest request =2;
}


MyProject/Protos/Requests/SubRequest.proto

syntax = "proto3";

option csharp_namespace = "My.Projects.Protos.Requests";

package subRequests;

message SubRequest {
   int32 SubId =1;
   string requestText =2;
}


现在,这段代码无法编译,显示的错误是 SubRequest is unknown。

我想知道如何导入不同的 proto 文件,以便实现这一点。我不太了解--proto_path cli 选项,也找不到任何明确的文档。

非常感谢任何帮助。提前致谢。 提前致谢。

【问题讨论】:

    标签: c# protocol-buffers protobuf-net proto


    【解决方案1】:

    评估导入时,会针对每个--proto_path 对其进行测试,以查看是否可以找到合适的匹配项。例如,您可以将文件并排放置在 Requests 文件夹中,使用 --proto_path 给出 Protos 文件夹的位置,然后在 proto 中相对于那里进行对话:

    import "Requests/SubRequest.proto";
    

    还要注意,您需要考虑包;它们不在同一个包中,因此您可以通过以 . 开头来明确限定它:

    syntax = "proto3";
    import "Requests/SubRequest.proto";
    
    option csharp_namespace = "My.Projects.Protos.Requests";
    
    
    package sampleRequests;
    
    message SampleRequest {
       int32 requestNumber =1;
       .subRequests.SubRequest request =2;
    }
    

    【讨论】:

    • --proto_path 是我需要做的事情还是编译器做的事情?
    • 感谢您的回答。如果以上是我在使用 proto 处理 C# 项目时需要做的事情,请指导我查看某种文档
    • @JinsPeter 哪个编译器? --proto_path 实际上是 Google protobuf 架构编译器的一个参数,(又名“protoc”)所以如果你的意思是:是的。如果您使用的是 protobuf-net:它:可选的命令行工具(“protogen”)模仿“protoc”。 C# 编译器对 .proto 文件毫无兴趣。您可能在谈论构建加载项?如果是这样,您可能正在寻找github.com/grpc/grpc/blob/master/src/csharp/…
    猜你喜欢
    • 2021-11-16
    • 2021-03-17
    • 1970-01-01
    • 2022-07-05
    • 2022-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多