Protocol buffers 多协议中的FileOptions扩展

Protocol buffers 多协议中的FileOptions扩展,protocol-buffers,Protocol Buffers,我正试图利用文件级扩展名,使用FileOptions对一些原型文件进行版本设置 我创建了以下文件: Version.proto import "google/protobuf/descriptor.proto"; extend google.protobuf.FileOptions { string version = 50001; } import "Version.proto"; option (version) = "1.0.1"; import "Version.proto";

我正试图利用文件级扩展名,使用FileOptions对一些原型文件进行版本设置

我创建了以下文件:

Version.proto

import "google/protobuf/descriptor.proto";
extend google.protobuf.FileOptions {
  string version = 50001;
}
import "Version.proto";
option (version) = "1.0.1";
import "Version.proto";
option (version) = "1.0.1";
我还有两个额外的proto,它们导入Version.proto并使用option(Version)扩展名:

A.proto

import "google/protobuf/descriptor.proto";
extend google.protobuf.FileOptions {
  string version = 50001;
}
import "Version.proto";
option (version) = "1.0.1";
import "Version.proto";
option (version) = "1.0.1";
B.proto

import "google/protobuf/descriptor.proto";
extend google.protobuf.FileOptions {
  string version = 50001;
}
import "Version.proto";
option (version) = "1.0.1";
import "Version.proto";
option (version) = "1.0.1";
我用protoc.exe和link libprotobufd.dll编译proto文件。当我运行使用A&B文件的应用程序时,出现以下错误:


[libprotobuf FATAL google\protobuf\extension\u set.cc:102]类型google.protobuf.FileOptions的多个扩展注册,字段号50001。

如果不知道您的项目是如何构造/编译的,我无法说出它是如何发生的,但您不知何故多次使用了字段号50001。再次检查数字50001是否只在项目中显示一次。如果有多个FileOptions消息浮动,则它们都共享相同的消息扩展名字段号


如果您非常确定自己没有注册两次
50001
,请尝试切换到像
78354
这样的随机项,看看问题是否仍然存在。

我尝试了不同的号码,但没有帮助。据我了解,第一次在A.proto输入Version.proto时,在B.PROTO中保留了这个数。我的设置是:C++ VS 2017,原Buff3.3.0。Protos由protoc.exe编译,输出文件包含在项目中。Protobuf.dll动态链接。@GrzesiekMal是否同时编译所有文件?是的,一次编译所有文件。本期杂志在这里有更多细节: