【发布时间】:2012-05-03 13:48:59
【问题描述】:
我有一个插件程序集,它为它“插入”的应用程序引用了第 3 方程序集。然后我有一个实用程序来运行这个第 3 方应用程序,将类的全名、程序集名称和要运行的插件中的方法传递给它。
我可以将这些详细信息硬编码为实用程序中的字符串常量。相反,我想在运行时使用反射来获取它们。插件类实现了一个特定的接口,并且该方法使用自定义属性进行了注释。所以我应该是有可能的。我在插件中添加了一个特定的反射类并调用它来获取详细信息。但它倒在(代表)行:
Assembly.GetExecutingAssembly().GetExportedTypes() 与 FileNotFoundException 由于尝试加载第 3 方程序集之一。由于许可规则,我不想将该实用程序直接链接到这些第 3 方程序集。
所以我的问题是,如何在不触发尝试加载其他引用程序集的情况下获取插件程序集中的类列表?有可能吗,还是我必须求助于我的字符串常量?
【问题讨论】:
-
一种可能的解决方案是使用
Mono.Cecil进行检查而不是反射 -
为什么要检查程序集?你将如何处理你得到的
Types? -
计划是遍历每种类型以检查它是否实现了接口。如果是这样,然后我计划搜索该类型以找到使用我的自定义属性注释的方法。然后使用这些值调用带有 -exec "
. 等参数的应用程序, " -
Assembly.ReflectionOnlyLoad不这样做吗? msdn.microsoft.com/en-us/library/e2s44xz6.aspx -
@Tergiver,感谢您的建议,但遗憾的是这不起作用。当我尝试 ReflectionOnlyLoad 路由时,它给了我一个例外:“使用 ReflectionOnly API 时,必须通过 ReflectionOnlyAssemblyResolve 事件按需预加载或加载依赖程序集。” :(
标签: c# .net reflection