C# 无法从MEF中的其他库调用库

C# 无法从MEF中的其他库调用库,c#,.net-4.0,mef,C#,.net 4.0,Mef,我有3个类库,LibA、LibB和LibC。这些库分别定义了类A、B和C class C { public IEnumerable<X> FuncInC() { return something; } } C类 { 公共IEnumerable functinc() { 归还某物; } } LibC被添加为LibB中的引用。B类使用C类。使用MEF,我从LibB导出了B类 [Export(typeof(InterfaceForB))] c

我有3个类库,LibA、LibB和LibC。这些库分别定义了类A、B和C

class C
{
  public IEnumerable<X> FuncInC()
  {      
    return something;
  }
}
C类
{
公共IEnumerable functinc()
{      
归还某物;
}
}
LibC被添加为LibB中的引用。B类使用C类。使用MEF,我从LibB导出了B类

[Export(typeof(InterfaceForB))]
class B : InterfaceForB
{
  public IEnumerable<X> FuncInB()
  {
    return new C().FuncInC();
  } 
}
[导出(typeof(InterfaceForB))]
B类:接口论坛
{
公共IEnumerable FuncInB()
{
返回新的C().FuncInC();
} 
}
在类A中,我使用从B导出的类,如下所示

public class A : InterfaceForA
{
    [Import(typeof(InterfaceForB))]
    private InterfaceForB _b;

    private CompositionContainer _container;

    public A()
    {
      var _catalog = new DirectoryCatalog(System.IO.Directory.GetCurrentDirectory());
      _container = new CompositionContainer(_catalog);
      _b = _container.GetExportedValue<InterfaceForB>();
    }

    public IEnumerable<X> FuncInA()
    {
      return _b.FuncInB();
    }
}
公共A类:InterfaceForA
{
[导入(类型(接口论坛))]
专用接口论坛;
私有合成容器_容器;
公共A()
{
var_catalog=newdirectorycalog(System.IO.Directory.GetCurrentDirectory());
_容器=新的合成容器(_目录);
_b=_container.GetExportedValue();
}
公共IEnumerable functina()
{
返回_b.FuncInB();
}
}
当我运行
FuncInA()
时,它会引发
FileNotFoundException
,并显示以下详细信息:

“无法加载文件或程序集 'LibC,Version=1.0.0.0, 区域性=中性,PublicKeyToken=空' 或者它的一个依赖项。系统 找不到指定的文件。“

注:

  • LibC引用存在于LibB中,并且它是无错误生成的
  • 所有程序集(本例中为输出DLL)都存在于同一文件夹中
  • 如果我在FuncInB()定义中对代码“returnnewc().FuncInC();”进行注释,并返回一个伪对象,则它可以正常工作,不会出现错误。问题在于引用的LibC使用

  • 在解决方案资源管理器中显示的LibB引用中,右键单击LibC“properties”,将“Specific Version”设置为“False”


    或者更好的方法是删除二进制引用并用项目引用替换它(假设LibC与LibB位于同一个解决方案中)。

    在解决方案资源管理器中显示的LibB引用中,右键单击LibC,“属性”,将“特定版本”设置为“False”


    或者更好的方法是删除二进制引用并用项目引用替换它(假设LibC与LibB使用相同的解决方案)。

    我也有同样的问题。特定版本已设置为false。我有相同的问题。特定版本已设置为false。