程序集版本属性未被Assembly.GetCustomAttributesData找到。

4
您可以加载一个程序集并查询所有程序集属性,包括AssemblyInformationalVersionAttributeAssemblyVersionAttributeAssemblyFileVersionAttribute。但是,当使用Assembly.ReflectionOnlyLoadFrom方法仅以反射方式打开程序集时,只列出信息版本和文件版本,而不是AssemblyVersionAttribute
为什么我不能得到那个属性呢?
Mono Cecil可以读取它们,就像ILSpy所演示的那样。但是那个库对于我的特定工具来说太笨重了。
1个回答

6

因为编译器和运行时都会虚报就像博士一样

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

现在,对于普通反射模型,运行时可以欺骗这一点-通过从它实际去的地方提取值,并假装已将它们添加为属性元数据-使其看起来实际上已经添加了它们。对于仅反射模型,它不会这样做。

您只需要通过程序集实例检查程序集版本。在IL术语中,这是.assembly条目中的.ver。但是,在运行时读取它的最简单方法可能是assembly.GetName().Version

您可以通过查看反射器、ildasm或任何其他喜欢的工具中的原始程序集来验证此操作。


这会与CodeAnalysis报告缺少的AssemblyVersionAttribute有任何关联吗(尽管我可以清楚地在AssemblyInfo.cs中看到它)? - IAbstract

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接