我试图从一个巨大的解决方案中检索每个程序集版本,但是我发现当我使用dotpeek打开程序集时,它显示了真实版本并且我能够bindiredirect
使用这个号码:
但是从反思来看,使用Assembly.ImageRuntimeVersion
:
System.Security.Cryptography.Primitives, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
使用Assembly.GetName().Version
:
4.0.0.0
我已尝试使用下面的代码找到了我能找到的所有可能版本,但没有一个版本带有正确的数字。
Assembly assembly = Assembly.LoadFile(f);
AssemblyName thisAssemName = assembly.GetName();
Version version = thisAssemName.Version;
FileVersionInfo fileversion = FileVersionInfo.GetVersionInfo(f);
var multipleVersion = fileversion.ProductVersion
+ "|" + version
+ "|" + assembly.ImageRuntimeVersion
+ "|" + assembly;
我不知道dotpeek背后的魔力,但它有正确的事情。如何检索与工具相同的编号?
答案 0 :(得分:1)
dotpeek在这里没有任何魔力。对Assembly.LoadFile(string path)
方法来说,这只是一个非常混乱的名称和行为。 Assembly.LoadFile()
实际上并没有在指定路径加载程序集,它更喜欢GAC,如描述here。您可以使用ProcessExplorer或类似工具检查加载的装配的实际路径。
如果要在精确路径上加载程序集以进行反射,最好使用Assembly.ReflectionOnlyLoadFrom()
方法:
Assembly assembly = Assembly.ReflectionOnlyLoadFrom(f);
在这种情况下,assembly.GetName().Version
应该会为您提供正确的程序集版本。