MEF-приложение прекрасно работает на локальном компьютере, но не импортирует надстройки при запуске из сетевого ресурса - PullRequest
3 голосов
/ 24 марта 2011

Я конвертирую доморощенную архитектуру плагинов в MEF .NET 4.0. Приложение на базе MEF прекрасно работает, когда оно запускается с моей локальной машины. Однако когда я перемещаю приложение в общий сетевой ресурс и затем запускаю приложение, MEF больше не загружает мои плагины.

Когда я присоединяю сеанс отладки к процессу и проверяю объект DirectoryCatalog, я вижу, что в свойствах Assemblies или Parts отсутствуют элементы. FullPath - это правильный каталог, а свойство LoadFiles включает в себя все библиотеки DLL в искомом каталоге.

Сначала я думал, что это проблема CasPol, пока не попытался изменить CasPol и получил предупреждение о том, что CasPol больше не включен по умолчанию в .NET 4.0. Это должно быть что-то еще. У меня есть Полные разрешения для рассматриваемого каталога.

Вот свойство, которое будет содержать импортированные надстройки:

[ImportMany]
private IEnumerable<IRecipient> RecipientAddIns;

А вот метод, который обнаруживает и импортирует AddIns:

private void LoadRecipientAddIns()
{
  using (var catalog = new AggregateCatalog())
  {
    // Look for IRecipient AddIns in the ./Recipients directory.
    catalog.Catalogs.Add(new DirectoryCatalog("Recipients"));

    // Look for IRecipient AddIns in subdirectories hanging off of ./Recipients.
    foreach (string currentDirPath in Directory.GetDirectories("Recipients"))
      catalog.Catalogs.Add(new DirectoryCatalog(currentDirPath));

    using (var compositionContainer = new CompositionContainer(catalog))
    {
      compositionContainer.ComposeParts();
      compositionContainer.SatisfyImportsOnce(this);

      // The discovered AddIns should now be in the RecipientAddIns property.
    }

    // Do stuff with the Recipient AddIns
    foreach (var recipient in this.RecipientAddIns)
    {
      ...
    }
  }

  // Clear the list of discovered Recipient AddIns
  this.RecipientAddIns = null;
}

Есть идеи?

Спасибо.

1 Ответ

3 голосов
/ 24 марта 2011

Попробуйте загрузить сборки самостоятельно (то есть с помощью Assembly.Load или LoadFrom). Я подозреваю, что вы получите исключение, которое, вероятно, проглатывает DirectoryCatalog. Исключение должно помочь вам понять, что не так.

...