如何确定.NET程序集是否包含非托管代码?

Dan*_*nov 11 .net assemblies native unmanaged

包含托管代码和非托管代码混合的.NET程序集不能与其他程序集进行ILMerged.

如何验证给定的.NET程序集是包含纯托管代码,还是托管代码和非托管代码的混合?

Dan*_*nov 9

正如nobugz所建议的,更容易看到CLR Flags的方法是使用该corflags实用程序,它是.NET 2.0 SDK的一部分.

如果未指定任何选项,则显示给定图像的标志:

C:\>corflags Foo.dll
Version   : v2.0.50727
CLR Header: 2.5
PE        : PE32
CorFlags  : 9
ILONLY    : 1
32BIT     : 0
Signed    : 1
Run Code Online (Sandbox Code Playgroud)

"ILONLY"位指示这是纯粹的托管程序集还是混合程序集.

请注意,来自用户'nobugz'的注释表明这些标记不保证是正确的,因此这种方法可能不是万无一失的.


Wim*_*nen 5

针对您的程序集运行PEVerify工具.

PEVerify.exe与Visual Studio一起安装,例如Visual Studio 2012附带的这个:

C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\PEVerify.exe