Assembly.GetCustomAttributesData找不到AssemblyVersionAttribute

ygo*_*goe 4 .net reflection attributes .net-assembly

您可以加载程序集和查询中的所有组件属性,包括AssemblyInformationalVersionAttributeAssemblyVersionAttributeAssemblyFileVersionAttribute。但是,仅使用该Assembly.ReflectionOnlyLoadFrom方法打开程序集进行反射时,仅列出信息版本和文件版本,而不列出AssemblyVersionAttribute

为什么我也没有得到该属性?

正如ILSpy演示的那样,Mono Cecil可以阅读所有内容。但是对于我的特定工具而言,该库太大了。

Mar*_*ell 6

因为编译器和运行时都说谎就像医生一样

有些属性实际上并未以其自然形式嵌入。AssemblyVersionAttribute是其中之一。另一个是SerializableAttribute。它们不会作为.custom instance条目添加,而是通过其他信息表示。

现在,对于常规反射模型,运行时可以对其进行欺骗-通过将值从其实际位置拉出并进行伪装,使其看起来像实际上已将其作为属性元数据添加。对于仅反射模型不执行此操作。

您只需要通过Assembly实例来检查Assembly版本。在IL而言,这是.ver.assembly入境。但是,assembly.GetName().Version这可能是在运行时读取它的最简单方法。

您可以通过在反射器,ildasm或任何其他选择的工具中查看原始装配来验证这一点。