Google protobuf 3:弃用了一个字段,但无法删除依赖项?

Google protobuf 3: deprecated a field, but cannot remove the dependencies?

我有一个依赖于原型 B 的原型 A。然后我弃用了字段 protoB:

import "protoB.proto";

message ProtoA {
  string assignmentStatus = 1;
  protoB proto_b = 2 [deprecated = true];
}

我认为在这种情况下我应该能够删除 import 语句,对吗?但是当我这样做时,编译器抱怨没有导入依赖项。

这是怎么回事?

将某些内容标记为已弃用只是...将其标记为已弃用;例如,在 C# 中,proto_b 成员将被声明但标记为 [Obsolete]。由于它仍然存在,因此它需要知道将其描述为什么。例如,数据仍然可以在您的应用程序中访问。

如果您想删除它:删除它:

message ProtoA {
  string assignmentStatus = 1;
  // field 2 *was* protoB proto_b = 2, now removed
}

(留下评论很重要,可以避免人们不小心重复使用字段编号,这可能会导致预先存在的数据出现问题)。