可以加载程序集并查询所有程序集属性,包括AssemblyInformationalVersionAttribute、AssemblyVersionAttribute和AssemblyFileVersionAttribute。但是,当仅使用Assembly.ReflectionOnlyLoadFrom方法打开反射程序集时,只列出了信息版本和文件版本,而没有列出AssemblyVersionAttribute。
为什么我也不明白这个属性呢?
Mono可以全部读取它们,正如ILSpy所演示的那样。但对于我的特定工具来说,这个库太大了。
发布于 2014-05-29 11:54:07
因为编译器和运行时都是谎言。就像博士一样。
实际上,有一些属性可以使而不是嵌入到它们的自然形式中。AssemblyVersionAttribute就是其中之一。另一个是SerializableAttribute。它们不是作为.custom instance条目添加的,而是通过其他信息表示的。
现在,对于常规的反射模型,运行时可以欺骗它--使它看起来好像实际上添加了它们作为属性元数据--将值从实际的位置提取出来,然后假装。它不是这样做的,只有反射模型。
您只需通过程序集实例检查程序集版本即可。就IL而言,这是.assembly条目中的.assembly。但是assembly.GetName().Version可能是在运行时读取它的最简单的方法。
您可以通过查看反射器、ildasm或任何其他选择工具中的原始程序集来验证这一点。
https://stackoverflow.com/questions/23932350
复制相似问题