我在你面前拿着一个DLL。只使用Win32 SDK,你能告诉我这个DLL是否是一个.NET程序集吗?
为什么呢?我们的应用程序以DLL的形式加载插件。我们正在尝试扩展这些插件的定义以允许.NET程序集,但接口将是不同的,因此加载器需要知道DLL在加载之前是管理还是非管理。
答案 0 :(得分:18)
确定DLL(或EXE)是受管理还是非受管,use dumpbin.exe
with the /dependents
switch。如果看到mscoree.dll
in the output,那么程序集就是一个托管程序集。
例如,对于我在Visual Studio 2010中创建的托管DLL,我得到以下输出:
Dump of file <MANAGED_DLL>.dll
File Type: DLL
Image has the following dependencies:
mscoree.dll
Summary
2000 .reloc
2000 .rsrc
2000 .sdata
12000 .text
dumpbin.exe
是 Visual Studio工具的一部分。要运行它,一种方便的方法是通过 Visual Studio命令提示符。例如,从运行Visual Studio 2010的Windows 7计算机上,我在Windows开始菜单中找到Visual Studio命令提示符:
Microsoft Visual Studio 2010 =&gt; Visual Studio工具 =&gt; Visual Studio命令提示符(2010)
然后,在Visual Studio命令提示符中输入:
dumpbin /dependents DLL_OF_INTEREST.DLL
<强> 或 强>
dumpbin /dependents EXE_OF_INTEREST.EXE
作为替代方案,您可以使用Visual Studio Tools附带的corflags.exe
实用程序。在 非托管 程序集上从Visual Studio命令提示符运行它:
corflags UNMANAGED.DLL
..你会得到:
corflags : error CF008 : The specified file does not have a valid managed header
...而在 托管 程序集上,您将获得类似的内容:
Version : v2.0.50727
CLR Header: 2.5
PE : PE32
CorFlags : 1
ILONLY : 1
32BIT : 0
Signed : 0
相关:强>
答案 1 :(得分:6)
我只是尝试将其作为.NET程序集加载,如果失败,则回退到“非托管”界面。
答案 2 :(得分:5)
您可以检查PE头信息,以获取有关DLL中包含的信息类型的信息。这article describes how to accomplish this in detail。