1

与 MEF 用户的常见问题相反,我不想弄清楚为什么我使用 MEF 加载的程序集的依赖关系没有得到解决。我正在解决相反的问题 - 试图找出加载依赖项的原因。

情况是我有一个 ASP.NET 应用程序,它使用 MEF 来动态加载驻留在应用程序目录之外的扩展程序集。在我用 MEF 探测的不同目录中可能有同一个扩展程序集的多个版本,每个都有自己的一组依赖项,这些依赖项又可能是单个程序集的多个版本(即扩展A.dll,1.0.0.0有一个依赖项D.dll, 1.0.0.0和扩展B.dll, 2.0.0.0具有依赖项 D.dll, 2.0.0.0)。

从某种意义上说,所有扩展及其所有依赖项都已正确加载。我不知道为什么。我的web.config文件中没有特殊设置。在关于组装解析的官方文档中哪里说它应该工作?它没有说明查看请求程序集所在的同一目录。

我希望 Fusion Log Viewer 会告诉我运行时如何定位依赖项,但即使它向我显示给定依赖项的所有不同版本的绑定请求,当我单击它查看完整日志时,我只看到失败绑定(是的,我将其设置为记录所有绑定请求,而不仅仅是失败的请求)。

谁能指出我解释为什么这种情况有效的官方文档的一部分?

4

1 回答 1

1

MEF 的主要分辨率由所ComposablePartCatalog使用的决定。例如,如果您使用DirectoryCatalog,将探测并找到指定目录中的所有程序集。

通过查看CompositionContainer,您应该能够找到现有的目录,而这些目录又应该提供一些详细信息,说明零件为何正确组合。

由于“已探测的其他位置”中定义的规则,也有可能找到您的依赖项:

如果程序集使用 LoadFrom 方法引用另一个程序集,则调用程序集的位置被认为是有关在何处找到被引用程序集的提示。如果找到匹配项,则加载该程序集。


如果您使用 aDirectoryCatalog在目录中查找程序集,它会在内部加载该文件夹中的每个程序集。这将导致您的所有依赖项在DirectoryCatalog构建时也被加载到进程中。

于 2013-10-25T17:10:25.937 回答