Мы внедряем инфраструктуру плагинов для нашего приложения и загружаем сборки плагинов, используя Assembly.Loadfrom. Затем мы используем GetTypes () и дополнительно исследуем типы с каждым файлом плагина для поддерживаемых интерфейсов.
Путь к плагинам предоставляется пользователем, и мы перебираем каждый из файлов в папке, чтобы посмотреть, поддерживает ли он (плагин) наш интерфейс плагина. Если это так, мы создаем экземпляр, если нет, мы переходим к следующему файлу.
Мы строим две версии программного обеспечения из одной базы кода (appA_1 и appA_2).
Загрузка плагинов работает хорошо, когда плагины загружаются приложением, которое было создано одновременно с файлом плагина. Однако если мы создаем appA_2 и указываем на папку плагинов appA_1, мы получаем исключение при вызове GetTypes ().
Базовая версия нашего кода:
var pluginAssembly = Assembly.LoadFrom(FileName);
foreach (var pluginType in pluginAssembly.GetTypes())
{
Мы получаем исключение «ReflectionTypeLoadException».
Это связано с тем, что мы хотим, чтобы наше приложение могло загружать типы любого плагина, созданного кем-либо. Нам чего-то не хватает?
EDIT:
После итерации исключений LoaderException мы обнаружили, что существует один файл libPublic.dll, который генерирует исключение System.IO.FileNotFoundException. Странно то, что этот файл находится в каталоге приложения, а плагин связан с файлом проекта.
РЕДАКТИРОВАТЬ 2:
В журнале исключений мы находим следующее
«Сравнение имени сборки привело к несоответствию: номер редакции»