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

问题描述 投票:0回答:2

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

import "protoB.proto";

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

我认为在这种情况下我应该能够删除

import
语句,对吗?但是当我这样做时,编译器抱怨依赖项没有被导入。

这里有什么交易?

protocol-buffers protobuf-net proto
2个回答
6
投票

将某些东西标记为已弃用只是...将其标记为已弃用;例如,在 C# 中,将声明

proto_b
成员,但将其标记为
[Obsolete]
。既然它仍然存在,它需要知道如何描述它。例如,数据仍然可以在您的应用程序中访问。

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

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

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


0
投票

您应该根据文档保留字段。 这样以后就不会有人使用它们了。

message ProtoA {
  string assignmentStatus = 1;
  // field proto_b = 2, was removed due to bla bla
  reserved 2;
}
© www.soinside.com 2019 - 2024. All rights reserved.