【发布时间】:2014-09-23 10:02:24
【问题描述】:
对于我正在构建的应用程序,我们使用 MEF 创建插件系统。每个插件都是用它自己的依赖项(引用)构建的,最后复制到应用程序知道的指定文件夹中并查找插件。顺便说一句,复制是通过构建后脚本完成的。
问题是我们有单独的插件,它们可能引用同一程序集的不同版本。为此,我们的想法是,我们应该让每个插件在插件文件夹中创建自己的文件夹,以防止程序集相互覆盖。但是我们得到了异常,因为 AppDomain 不知道要查找插件所需的引用。我们确实发现我们可以提供带有探测的路径。但这意味着必须在 app.config 中注册每个插件。我们希望以更通用的方式做到这一点。
该应用程序不是 Web 应用程序。这是一个将作为服务器的控制台应用程序,我们称之为外壳。 shell 不知道这些程序集,而只有 shell 的插件知道这些程序集。这些插件也不为 shell 所知,而是由 MEF 发现的。唯一将外壳和插件粘合在一起的是接口。
我真的被这个项目困住了,如果我能在这件事上得到任何帮助,我将不胜感激。这是一个 .Net 框架问题,而不是 MEF 问题,但我想我会简要介绍一下情况。
【问题讨论】:
-
看看
BuildManager.AddReferencedAssembly方法和PreApplicationStartMethodAttribute。在它的帮助下,您可以在生命周期的早期将程序集添加到应用程序的一组引用程序集中。我不确定他们是否可以帮助您使用引用同一程序集的不同版本的不同插件。 -
感谢伊利亚的回复。该应用程序不是 Web 应用程序。这是一个将作为服务器的控制台应用程序,我们称之为外壳。 shell 不知道这些程序集,而只有 shell 的插件知道这些程序集。这些插件也不为 shell 所知,而是由 MEF 发现的。唯一将外壳和插件粘合在一起的是接口。
标签: .net assemblies app-config mef appdomain