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

能否通过代码获取MemberInfo及特性标注对应的代码位置?

答复

该需求技术层面完全可实现,不存在原理层面的阻碍。

核心依据如下:

  • C# 编译生成的程序集配套的调试符号文件(便携PDB/Windows PDB)原生存储了所有类型成员、特性标注位置对应的源文件路径、行号、列号元数据,这部分数据是编译器生成时默认写入的,可通过编译配置控制是否生成。
  • .NET 基础类库提供了原生的符号读取接口,可以直接通过MemberInfo携带的元数据Token,查询到对应成员、成员上挂载的特性对应的源代码声明位置,不需要依赖异常堆栈、手动标记位置等变通方案。
  • 针对你使用的 Unity Editor 场景:编辑器环境下默认会加载所有脚本程序集对应的完整调试符号,你在做UI绑定校验逻辑时,拿到目标字段对应的FieldInfo对象后,直接调用符号读取接口就能拿到[Query]特性标注位置的源文件路径和行号,拼接到警告日志中输出即可,日志指向的位置和你调用日志打印方法的代码位置完全无关。
  • 唯一的限制场景是正式发布构建时如果手动剥离了调试符号,就无法读取到位置信息,但这属于构建配置的选择问题,不属于技术不可实现的范畴。

你问题中给出的特性标注示例:

[Query("button-upvote")]
private Button _buttonUpvote;

针对这段代码的位置获取,不需要修改特性定义、不需要额外给特性传位置参数,直接通过符号读取接口就能拿到精确的标注位置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 01:39:24