You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

废弃Protocol Buffer字段时能否添加替代提示信息?(C#场景)

给Protobuf废弃字段加提示,让C#生成带消息的Obsolete特性

要让标记为deprecated的字段在C#里生成带指定提示的Obsolete特性,有两种靠谱的方式,根据你使用的Protobuf版本选择:

方式一:用官方自带的C#扩展选项(推荐,Protobuf 3.20+可用)

直接用官方提供的C#专属配置,不用自己定义扩展,省心规范:

import "google/protobuf/csharp_options.proto";

message Request {
  sint64 Id = 1 [
    deprecated = true,
    (google.protobuf.csharp_options.obsolete_message) = "Please use \"Guid\" field instead",
    (google.protobuf.csharp_options.obsolete_error) = true // 开启后使用Id字段会触发编译错误,刚好满足你强制用户用Guid的需求
  ];
  optional string Guid = 2;
  optional bool GetSoftDeletedRecords = 3;
}

方式二:自定义扩展选项(兼容旧版本Protobuf)

如果你的Protobuf版本较低,不支持官方的C#专属选项,就自己定义一个扩展字段来存储提示消息:

import "google/protobuf/descriptor.proto";

// 自定义扩展选项,编号选1000-9999之间的,避免和官方内置选项冲突
extend google.protobuf.FieldOptions {
  optional string obsolete_message = 1001;
}

message Request {
  sint64 Id = 1 [deprecated = true, obsolete_message = "Please use \"Guid\" field instead"];
  optional string Guid = 2;
  optional bool GetSoftDeletedRecords = 3;
}

最终效果

不管用哪种方式,生成的C#代码里,Id字段都会带上带提示的Obsolete特性:

[System.Obsolete("Please use \"Guid\" field instead", true)]
public long Id { get; set; }

用户只要使用Id字段,编译器就会直接抛出错误并显示你指定的提示信息,强制引导他们切换到Guid字段。

内容的提问来源于stack exchange,提问作者Sidney

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 21:25:55