Невозможно вызвать библиотеку из других в MEF - PullRequest
1 голос
/ 17 июня 2011

У меня есть 3 библиотеки классов, LibA, LibB и LibC. В этих библиотеках определены классы A, B и C соответственно.

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

LibC добавлен в качестве ссылки в LibB. И класс B использует класс C. Используя MEF, я экспортировал класс B из LibB.

[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, Культура = нейтральная, PublicKeyToken = null ' или одна из его зависимостей. Система не могу найти указанный файл. "

Примечание:

  1. Ссылка на LibC существует в LibB и собирается без ошибок.
  2. И все сборки (в данном случае выходные dll) находятся в одной папке.
  3. Если я прокомментирую код «return new C (). FuncInC ();» в определении FuncInB () и возвращает фиктивный объект, он работает без ошибок. Проблема из-за использования LibC в качестве ссылки.

1 Ответ

1 голос
/ 17 июня 2011

В ссылках LibB, показанных в обозревателе решений, щелкните правой кнопкой мыши LibC, «свойства», установите для «Определенной версии» значение «Ложь».

Или еще лучше, удалите двоичную ссылку и замените ее нассылка на проект (при условии, что LibC находится в том же решении, что и LibB).

...