Protobuf 从另一个 proto C# 项目导入消息
Posted
技术标签:
【中文标题】Protobuf 从另一个 proto C# 项目导入消息【英文标题】:Protobuf Importing Message from another proto C# projects 【发布时间】: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 选项,也找不到任何明确的文档。
非常感谢任何帮助。提前致谢。 提前致谢。
【问题讨论】:
【参考方案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/…?以上是关于Protobuf 从另一个 proto C# 项目导入消息的主要内容,如果未能解决你的问题,请参考以下文章
protobuf 下载编译,拷贝,proto文件生成c# c++代码
protobuf 下载编译,拷贝,proto文件生成c# c++代码
protobuf 下载编译,拷贝,proto文件生成c# c++代码
用于 C# 的 Google Protobuf 3.0.0 程序集