我正在编写一个必须在.NET Framework 2.0下运行的C#控制台应用程序,但需要能够识别程序集的框架版本,即使它高于.NET 2.0。
我无法使用AssemblyName.GetAssemblyName
或相关函数,因为如果目标程序集是在以后的框架版本下构建的,它们将抛出BadImageFormatException
。有没有办法在不尝试以任何方式加载程序集的情况下获取此信息?
注意:我知道使用PowerShell可以实现这一点,但目标环境中没有该工具。
请注意,我不需要找出程序集的版本,但需要找到它所需的Framework版本。
答案 0 :(得分:0)
好吧,虽然Assembly.ReflectionOnlyLoadFrom
会阻塞错误的框架,但我找到了一种方法,通过将程序集作为字节数组读取,然后使用ReflectionOnlyLoad进行分析。
FileStream fs = File.OpenRead(tgtAssembly);
int asmLength = fs.Length > int.MaxValue ? int.MaxValue : (int)fs.Length;
byte[] buffer = new byte[asmLength];
fs.Read(buffer, 0, asmLength);
Assembly asm = Assembly.ReflectionOnlyLoad(buffer);
string frameworkVer = asm.ImageRuntimeVersion;