多个原型中的FileOptions扩展

时间:2019-04-11 07:49:36

标签: protocol-buffers

我正在尝试使用 FileOptions 使用文件级扩展来对某些原型文件进行版本控制。

我创建了以下文件:

Version.proto

import "google/protobuf/descriptor.proto";
extend google.protobuf.FileOptions {
  string version = 50001;
}

我还有另外两个导入Version.proto并使用option(version)扩展名的原型:

A.proto

import "Version.proto";
option (version) = "1.0.1";

B.proto

import "Version.proto";
option (version) = "1.0.1";

我用protoc.exe编译proto文件,并链接libprotobufd.dll。当我运行使用A和B文件的应用程序时,出现以下错误:

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

1 个答案:

答案 0 :(得分:0)

在不知道项目结构/正在编译的情况下我无法说出它是如何发生的,但是您不知何故多次使用了字段50001。仔细检查数字50001仅在您的项目中显示一次。如果周围有多条FileOptions消息,它们都共享相同的消息扩展名字段编号。

如果您确定自己没有两次注册50001,请尝试切换到78354之类的随机变量,看看问题是否仍然存在。