1

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

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

程序集A:ExportedTypeA、ExportedTypeB

组装 B: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\ 附加到执行目录来执行此操作?

有什么我做错了吗?

4

1 回答 1

1

你可能会遇到这个问题:

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

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

如何调试和诊断 MEF 故障

于 2012-06-23T00:15:57.523 回答