|
1
21
检查PE接头:
更新 :还有更多。NET的实现方式:
使用
|
|
2
12
如果组件被加载,例如
通过加载文件并检查是否抛出异常来检查文件是否是程序集的想法;看起来不太干净。毕竟,所有例外情况都应该在特殊情况下使用。
.NET程序集是常规的Win32 PE文件,操作系统对此没有区别。NET程序集和Win32可执行二进制文件,它们是相同的普通PE文件。那么,系统如何判断DLL或EXE是否是托管程序集以加载CLR呢? 它验证文件头以检查其是否为托管程序集。在随附的ECMA规范分区II元数据中。NET SDK中,PE格式中有一个单独的CLI头。正是 因此,简单地说,如果我们在这个数据目录中有值,那么这意味着它是有效的。NET程序集,否则不是。
|
|
|
3
3
Jeremy's answer 它适用于32位DLL。但我必须针对64位DLL对其进行优化,这些DLL似乎有更多特定于Windows的COFF字段。 Microsoft ,COFF 幻数 指示格式是PE32(32位)还是PE32+(64位)。如果是后者,则数据目录的偏移量为112字节,而不是96字节。
|
|
|
4
2
过去,面对同样的问题,我求助于使用您的反射方法,因为另一种方法是手动读取PE标头 like this 对于我的场景来说,这似乎有些矫枉过正,但它可能对你有用。 |
|
|
5
0
您没有指定是否必须在代码中执行此操作,或者您是否只是个人需要知道您在系统上查看的文件是否是。NET程序集(您可能认为这需要您编写自己的代码)。如果是后者,您可以使用Dependency Walker查看它是否依赖于MSCOREE.dll,即。网络运行时引擎。 |
|
|
6
0
你可以使用类似的东西:
也请查看: https://msdn.microsoft.com/en-us/library/ms173100.aspx |
|
|
7
0
2020年更新: 这应该是检测dll是否为a的最简单方法。网络库:
|
|
|
8
-2
|
|
|
Guilherme Albertini · DLL中的类 8 年前 |
|
|
Naomi · C#dll资源文件更改语言 8 年前 |
|
|
AidanH · C#DLL语言翻译实现[关闭] 8 年前 |
|
|
subham · DLL函数调用不工作 8 年前 |
|
|
PixelThis · 为什么我的DLL要求我的程序有一个特定的名称? 8 年前 |
|
|
nemo · DLL的“好”调用约定是什么? 8 年前 |