小编Mr.*_*lby的帖子

如何确定DLL是托管程序集还是本机(防止加载本机DLL)?

原标题:如何防止从.NET应用程序加载本机dll?

背景:

我的C#应用​​程序包括一个插件框架和通用插件加载器.

插件加载器枚举应用程序目录以识别插件dll(实质上它此时搜索*.dll).

在同一个应用程序目录中是一个本机(Windows,非.NET)dll,间接地,其中一个插件dll依赖于它.

插件加载器盲目地假设native.dll是.NET程序集dll,只是因为它只检查文件扩展名.当它尝试加载本机dll时,抛出异常:

"无法加载文件或程序集'native.dll'或其依赖项之一.模块应该包含程序集清单."

如果插件加载失败,我基本上创建了一个诊断报告,所以我试图避免让这个日志充满关于无法加载本机dll的消息(我甚至不想尝试).

问题:

是否有一些.NET API调用可用于确定二进制文件是否恰好是.NET程序集,以便我根本不尝试加载本机DLL?

也许从长远来看,我会将我的插件移动到一个子目录,但是现在,我只想要一个解决方案,不涉及在我的插件加载器中硬编码"native.dll"名称.

我想我正在寻找某种静态的Assembly.IsManaged()API调用,我忽略了......大概没有这样的API存在?

c# dll plugins assemblies native

25
推荐指数
4
解决办法
1万
查看次数

标签 统计

assemblies ×1

c# ×1

dll ×1

native ×1

plugins ×1