使用反射从程序集获取错误版本
Getting wrong Version from Assembly using Reflection
我试图从一个巨大的解决方案中检索每个程序集版本,但我发现当我使用 dotpeek 打开程序集时,它显示了真实版本并且我能够 bindiredirect
使用这个数字:
但是从反射来看,使用 Assembly.ImageRuntimeVersion
的数字完全不同:
System.Security.Cryptography.Primitives, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
使用Assembly.GetName().Version
:
4.0.0.0
我已经使用下面的代码尝试了我能找到的所有可能的版本,但是其中 none 个带来了正确的数字。
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 背后的魔力,但它有正确的东西。如何找回与工具相同的号码?
dotpeek 在这里没有任何魔力。对于 Assembly.LoadFile(string path)
方法,这只是一个 very-very 令人困惑的名称和行为。 Assembly.LoadFile()
实际上不会在指定路径加载程序集,它更喜欢描述的 GAC here. You could check the actual path of loaded assembly with ProcessExplorer 或类似工具。
如果你想在精确的路径加载程序集以进行反射,最好使用Assembly.ReflectionOnlyLoadFrom()
方法:
Assembly assembly = Assembly.ReflectionOnlyLoadFrom(f);
在这种情况下 assembly.GetName().Version
应该会为您提供正确的程序集版本。
我试图从一个巨大的解决方案中检索每个程序集版本,但我发现当我使用 dotpeek 打开程序集时,它显示了真实版本并且我能够 bindiredirect
使用这个数字:
但是从反射来看,使用 Assembly.ImageRuntimeVersion
的数字完全不同:
System.Security.Cryptography.Primitives, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a
使用Assembly.GetName().Version
:
4.0.0.0
我已经使用下面的代码尝试了我能找到的所有可能的版本,但是其中 none 个带来了正确的数字。
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 背后的魔力,但它有正确的东西。如何找回与工具相同的号码?
dotpeek 在这里没有任何魔力。对于 Assembly.LoadFile(string path)
方法,这只是一个 very-very 令人困惑的名称和行为。 Assembly.LoadFile()
实际上不会在指定路径加载程序集,它更喜欢描述的 GAC here. You could check the actual path of loaded assembly with ProcessExplorer 或类似工具。
如果你想在精确的路径加载程序集以进行反射,最好使用Assembly.ReflectionOnlyLoadFrom()
方法:
Assembly assembly = Assembly.ReflectionOnlyLoadFrom(f);
在这种情况下 assembly.GetName().Version
应该会为您提供正确的程序集版本。