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

GetCustomAttribute<>扩展方法返回null问题排查求助

问题原因及解决方案

核心原因1:自定义特性未实际应用到程序集

你只定义了AssemblyAttribute特性类,但没有将该特性标记到目标程序集上。特性类本身只是规则定义,必须显式添加到程序集元数据中,才能被读取工具检测到。

解决步骤:

在AssemblyAttribute.dll项目的AssemblyInfo.cs(或任意代码文件的命名空间声明之外)添加特性标记:

[assembly: AssemblyAttribute("你的模块名称")]

核心原因2:程序集加载上下文导致类型不匹配

你通过Assembly.LoadFile重新加载了已加载的程序集,此时新加载的程序集与原classtype.Assembly属于不同的加载上下文——即使类定义完全一致,两个AssemblyAttribute类型实例也会被判定为不相等,最终导致特性查找匹配失败,返回null。

解决步骤:

直接使用已加载的程序集实例,无需重复加载:

var classtype = typeof(AssemblyAttribute);
var assembly = classtype.Assembly;

// 直接用已加载的assembly对象,不要调用LoadFile重新加载
var attr = assembly.GetCustomAttribute<AssemblyAttribute>();
var ca = Attribute.GetCustomAttribute(assembly, typeof(AssemblyAttribute));

额外验证要点

  • 确认AssemblyAttribute.dll已正确引用到主程序项目,且设置为“复制到输出目录”。
  • 你的AttributeUsage配置是正确的:AttributeTargets.Assembly符合程序集特性的要求,AllowMultiple = false和Inherited = false不会影响特性读取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 12:14:54