对于我正在构建的应用程序,我们使用MEF来创建插件系统。每个插件都使用它自己的依赖项(引用)构建,最后复制到应用程序知道的指定文件夹中并查找插件。使用后构建脚本btw完成复制。
问题是我们有单独的插件,可能引用同一程序集的不同版本。为此,我们认为我们应该让每个插件在插件文件夹中创建它自己的文件夹,以防止组件相互覆盖。但后来我们得到了例外,因为AppDomain不知道要查找插件所需的引用。我们确实发现我们可以提供探测路径。但这意味着必须在app.config中注册每个插件。我们希望以更通用的方式做到这一点。
该应用程序不是Web应用程序。它是一个控制台应用程序,将作为服务器,我们称之为shell。 shell不知道程序集,只能看到shell的插件。这些插件不是shell所知,而是MEF发现的。将外壳和插件粘合在一起的唯一方法是接口。
我真的坚持这个项目,并希望能得到任何帮助。这是一个.Net框架问题,而不是MEF问题,但我想我会给出一个情况草图。
答案 0 :(得分:1)
使用探测路径的另一种方法是使用AppDomain.AssemblyResolve
event。每当.NET无法加载程序集时,它都会引发此事件,这将允许您自己定位和加载程序集。它可能不是最干净的解决方案,但它确实可以让您灵活地将组件放在适合您的任何结构中。