【发布时间】:2013-04-17 03:22:59
【问题描述】:
我正在开发一种工具,可以将插件加载到我们在办公室使用的商业软件中。可以通过创建一个 .NET 程序集来开发该软件的插件,该程序集的类继承自软件 API 中的类。
所以我的软件需要检查 DLL 以确定它们是否包含按名称从 API 插件类继承的类。但是,我不希望我的应用程序依赖于 API 本身。它不需要实例化或执行这些类中的任何一个,只需确定从 API 插件类继承的类的全名。
我可以使用以下方法加载 dll 程序集:
Assembly.LoadFrom(dllFileName)
然而,当我尝试在加载的程序集上调用 GetTypes() 时。我收到一个 ReflectionTypeLoadException,其中包含许多 LoaderExceptions,抱怨找不到 API 文件。
我也尝试过使用ReflectionOnlyLoadFrom(),但它抛出了同样的异常。
还有其他方法可以获取此信息吗?同样,我不需要执行任何代码,最终我希望我的工具可以在根本没有安装 API 或软件的计算机上工作。我只需要知道完整的类名。
【问题讨论】:
-
一个疯狂的猜测,你的
dllFileName是否依赖于其他dll's。如果是,这些 dll 的搜索路径是否相同? -
是的,这就是重点。感兴趣的 DLL 依赖于其他程序集(API),但我不希望我的工具依赖于 API 程序集。我没有尝试执行任何代码,只是确定 DLL 中的哪些类继承自 API 程序集中的特定类
标签: c# .net reflection .net-assembly system.reflection