我见过一些方法通过检查二进制结构来确定PE文件是否为.NET程序集。
这是测试多个文件的最快方法吗?我认为尝试加载每个文件(例如通过Assembly.ReflectionOnlyLoad)可能会非常慢,因为它将加载文件类型信息。
注意:我正在寻找以编程方式检查文件的方法。
我见过一些方法通过检查二进制结构来确定PE文件是否为.NET程序集。
这是测试多个文件的最快方法吗?我认为尝试加载每个文件(例如通过Assembly.ReflectionOnlyLoad)可能会非常慢,因为它将加载文件类型信息。
注意:我正在寻找以编程方式检查文件的方法。
我想Stormenet的回答在技术上不算是编程的,所以我会把我的回答分成一个答案。
为了获得最佳性能,没有什么能够比使用StreamReader
打开文件,读取前n个字节,并检查字节流中的.NET文件签名数据结构。
基本上,你可以用与验证DOS可执行文件相同的方式来验证某些东西:
寻找“MZ”头字节,这也恰好是MS-DOS开发人员之一Mark Zbikowski的缩写。过去我使用了AssemblyName.GetAssemblyName(),如果它不是托管程序集,则会抛出异常。但是,我从未对其进行性能测试,因此无法确定其速度有多快。
第一个链接将是最快和最简单的检查方法(PE文件头)。您正确地认为调用Assembly.ReflectionOnlyLoad会非常慢。
0
。可能是由于PInvoke调用引起的。Assembly.GetAssemblyName()
似乎是唯一可靠的检查它是否为.NET程序集的方法... - Daniel Fisher lennybacon