CompositionContainer通过DirectoryCatalog加载错误的目录

时间:2012-06-22 22:12:27

标签: c# .net mef

我遇到了一个奇怪的问题,MEF的合成容器和目录目录,我传递了一个包含程序集的文件夹的完整路径:

在C:\ Program Files \ MyCompany \ MyApp \ Bin

  

AssemblyA:ExportedTypeA,ExportedTypeB

     

AssemblyB:BaseExportedTypeA,BaseExportedTypeB

从其他位置执行(C:\ users \ Me \ dev \ project \ foo \ bar \ bar2 \ bin \ debug \ OtherApp.Exe)

在我打电话的应用程序中:

string ProviderPhysicalPath = @"C:\Program Files\MyCompany\MyApp\Bin";
using (DirectoryCatalog catalog = new DirectoryCatalog(ProviderPhysicalPath))
using (CompositionContainer container = new CompositionContainer(catalog))
{
     container.ComposeParts(this);
}

container.ComposeParts(this)上,我收到以下异常:

  

该组合物产生单一组成错误。根本原因如下。查看CompositionException.Errors属性以获取更多详细信息。

     

1)找不到路径'C:\ USERS \ Me \ dev \ project \ foo \ bar \ bar2 \ BIN \ DEBUG \ BIN \'的一部分。

令人困惑的是两个部分:

  1. 为什么要查看我未指定的目录?
  2. 为什么将\ bin \附加到执行目录来执行此操作?
  3. 我有什么问题吗?

1 个答案:

答案 0 :(得分:1)

您可能遇到此问题:

  

使用DirectoryCatalog或将路径传递给AssemblyCatalog构造函数时,MEF将尝试在默认的加载上下文中加载程序集。但是,如果程序集不在探测路径或GAC中,则这是不可能的,MEF将在加载 - 来自上下文中加载它们。

@"C:\Program Files\MyCompany\MyApp\Bin"可能不在探测路径中。我不能说我经历过这个问题或者对它进行过多次探索。有关详细信息,请参阅Daniel Plaisted的博客,向下滚动到“装配加载问题”部分

How to Debug and Diagnose MEF Failures