CompositionContainer中通过DirectoryCatalog加载错误的目录(Com

2019-10-16 21:19发布

我正在与MEF的组合物的容器和目录的目录,其中我通过在一个完整路径包含组件的文件夹的奇怪的问题:

在C:\ Program Files文件\ MyCompany的\ MyApp的\ BIN

AssemblyA:ExportedTypeA,ExportedTypeB

AssemblyB:BaseExportedTypeA,BaseExportedTypeB

从另一个位置执行(C:\用户\我\ dev的\项目\富\酒吧\ BAR2 \ BIN \调试\ 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:\用户\我\ dev的\项目\富\酒吧\ BAR2 \ BIN \ DEBUG \ BIN \'。

什么是令人困惑的是两个部分:

  1. 为什么找一个目录中我没有指定?
  2. 为什么它追加\ BIN \到执行目录做呢?

是不是我做错了吗?

Answer 1:

你可能会遇到这个问题:

当使用DirectoryCatalog或传递路径AssemblyCatalog构造,MEF将尝试加载组件在默认加载上下文。 然而,如果组件不是在探测路径或GAC,这将是不可能的,和MEF将在负载从上下文加载它们代替。

@"C:\Program Files\MyCompany\MyApp\Bin"可能不是在探测路径。 我不能说我所经历过的问题,或者多探索它。 见丹尼尔·普莱斯特德的详细信息,博客,向下滚动到部分中的“程序集加载问题”

如何调试和诊断故障MEF



文章来源: CompositionContainer loading wrong directory through DirectoryCatalog
标签: c# .net mef