2016-11-28 3 views
0

Я пытаюсь реализовать схему плагина с помощью MEF. У меня есть 3 проекта:ReflectionTypeLoadException при загрузке DLL

  • Хост проекта (WPF)
  • проект определения интерфейса (переносимая библиотека классов)
  • плагин проекта (портативная библиотека классов)

Сейчас в принимающем Я пытаюсь загрузить плагин assemly DLL (с ​​указанием только класса, который должен загрузить DLL):

public class SafeDirectoryCatalog : ComposablePartCatalog 
{ 
    private readonly AggregateCatalog _catalog; 

    public SafeDirectoryCatalog(string directory) 
    { 
     var files = Directory.GetFiles(directory, "*.dll", SearchOption.AllDirectories); 

     _catalog = new AggregateCatalog(); 

     foreach (var file in files) 
     { 
      try 
      { 
       var asmCat = new AssemblyCatalog(file); 

       if (asmCat.Parts.ToList().Count > 0) 
       { 
        _catalog.Catalogs.Add(asmCat); 
       } 

      } 
      catch (ReflectionTypeLoadException) 
      { 
      } 
      catch (BadImageFormatException) 
      { 
      } 
     } 
    } 
    public override IQueryable<ComposablePartDefinition> Parts 
    { 
     get { return _catalog.Parts; } 
    } 
} 

на

var asmCat = new AssemblyCatalog(file); 

Я могу видеть, что есть «ReflectionTypeLoadException» и список деталей эс пуста:

Exception Screenshot (VS is German)

Это мое определение интерфейса (выводит DLL, на который ссылаются в хозяине и проект плагин):

namespace HCInterfaces 
{ 
    public interface HomeControlInterface 
    { 
     string GetModuleName(); 
    } 
} 

И, наконец, это мой плагин класс, который выводит plugin.dll:

using HCInterfaces; 
using System.Composition; 

namespace Plugin2 
{ 
    public partial class MainWindow 
    { 
     public MainWindow() 
     { 

     } 


     [Export(typeof(HomeControlInterface))] 
     class BMW : HomeControlInterface 
     { 
      public string GetModuleName() 
      { 
       return "hännschenklein"; 
      } 
     } 

    } 
} 

ответ

Смежные вопросы