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
相关产品推荐
相关产品推荐

