我遇到了一个奇怪的问题,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 \'的一部分。
令人困惑的是两个部分:
我有什么问题吗?
答案 0 :(得分:1)
您可能遇到此问题:
使用DirectoryCatalog或将路径传递给AssemblyCatalog构造函数时,MEF将尝试在默认的加载上下文中加载程序集。但是,如果程序集不在探测路径或GAC中,则这是不可能的,MEF将在加载 - 来自上下文中加载它们。
@"C:\Program Files\MyCompany\MyApp\Bin"
可能不在探测路径中。我不能说我经历过这个问题或者对它进行过多次探索。有关详细信息,请参阅Daniel Plaisted的博客,向下滚动到“装配加载问题”部分