如何在程序中确定DLL是托管代码还是非托管代码?我们正在使用this code来确保我们所有托管的DLL都是MSIL。但是它会在非托管DLL上引发异常,所以我需要一种方法来首先检查DLL是否被管理。
答案 0 :(得分:4)
最简单的选择很可能只是尝试按原样打开文件,并捕获异常。任何非托管程序集都会在Assembly.LoadFrom
上抛出异常。
但是,如果您想更严格地确定这一点,则需要自己检查PE头以获取相应的信息。这个article describes the process详细说明,但需要检查DLL的PE头的IMAGE_OPTIONAL_HEADER结构。