无法从MEF中的其他人调用库

时间:2011-06-17 09:55:32

标签: c# .net-4.0 mef

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

class C
{
  public IEnumerable<X> FuncInC()
  {      
    return something;
  }
}

在LibB中添加了LibC作为参考。 B类使用C类。使用MEF,我从LibB导出了B类。

[Export(typeof(InterfaceForB))]
class B : InterfaceForB
{
  public IEnumerable<X> FuncInB()
  {
    return new 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();
    }
}

当我运行FuncInA()时,它会使用以下详细信息引发FileNotFoundException

  

“无法加载文件或程序集   'LibC,版本= 1.0.0.0,   Culture = neutral,PublicKeyToken = null'   或其中一个依赖项。系统   找不到指定的文件。“

注意:

  1. LibC引用存在于LibB中,并且构建没有错误。
  2. 并且所有程序集(本例中为输出dll)都存在于同一文件夹中。
  3. 如果我评论代码“return new C()。FuncInC();”在FuncInB()定义中,&amp;返回一个虚拟对象,它可以正常工作。问题是由于LibC的使用被提及。

1 个答案:

答案 0 :(得分:1)

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

或者更好的是,删除二进制引用并将其替换为项目引用(假设LibC与LibB在同一解决方案中)。