Я пытаюсь создать архитектуру плагина, в которой dll будут включены в zip-файл, распакованы, сохранены, а затем загружены, чтобы определенный тип мог строиться и работать. Теоретически это звучит выполнимо. Но у меня проблема с этим. Я продолжаю получатьКак загрузить сборку и получить все типы в ней с помощью C# (без ReflectionTypeLoadException)
ReflectionTypeLoadException.
Вот что у меня есть, что не работает:
var dlls = pluginFiles.Where(p => p.Value.FileInfo.Extension.ToLower() == ".dll").ToList();
int num = 0;
foreach(var dll in dlls){
var assembly = Assembly.LoadFile (dll.Value.FileInfo.FullName);
var pluginTypes = assembly.GetTypes().Where (p => p.IsSubclassOf (typeof (Plugin)));
foreach(var pluginType in pluginTypes){
var ctor = pluginType.GetConstructors().FirstOrDefault();
if (ctor == null) continue;
var plugin = (Plugin)ctor.Invoke (new object [] { });
if (plugin == null) continue;
num++;
_mgr.RegisterNew (plugin);
}
}
Как я пошаговое это отлаживать, исключение происходит в строке, где я бег assembly.GetTypes()
.
Что я здесь делаю неправильно? Должен ли я что-то делать с новым AppDomain?
Дополнительная информация: сборка, которую я загружаю, представляет собой тестовую сборку. У него есть ссылка на FakeItEasy. У этого есть один класс, который является классом, который я ищу. Этот конкретный класс является подклассом другого класса, который находится в сборке, на который ссылается мой вызывающий класс ... Это выглядело сбивающим с толку. Позвольте мне объяснить это так:
Сборка 1: Ядро, сборка 2: Dummy_assembly, Assembly 3: Tests.
- Оба испытания и фиктивный_сопровождение ссылка Core.
- Dummy_assembly - это dll, который я заархивировал, и пытаюсь распаковать, загрузить, а затем выполнить поиск.
- Тесты - это сборка, из которой я вызываю метод, показанный выше.
- Код, показанный выше, находится в Core.
Я смотрел this. Похоже, что это может быть применимо, но я не могу полностью сказать, как (и я не совсем понимаю, почему этот ответ работает на этот вопрос).
Что будет с ним обращаться? –
https://msdn.microsoft.com/en-us/library/ff527268(v=vs.110).aspx – Jeff