原标题:如何防止从 .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?