Я пытаюсь понять разницу между Assembly.Load и Assembly.ReflectionOnlyLoad.
В приведенном ниже коде я пытаюсь найти все объекты в данной сборке, которые наследуются от данного интерфейса:
var myTypes = new List<Type>();
var assembly = Assembly.Load("MyProject.Components");
foreach (var type in assembly.GetTypes())
{
if (type.GetInterfaces().Contains(typeof(ISuperInterface)))
{
myTypes.Add(type);
}
}
Этот код отлично работает для меня, но я изучал другие, возможно, лучшие альтернативы и наткнулся на метод Assembly.ReflectionOnlyLoad ().
Я предположил, что, поскольку я не загружаю и не выполняю какие-либо объекты, по сути, просто запрашиваю их определения, чтобы я мог использовать ReflectionOnlyLoad для небольшого увеличения производительности ...
Но оказывается, что когда я меняю Assembly.Load на Assembly.ReflectionOnlyLoad, я получаю следующую ошибку при вызове assembly.GetTypes ():
System.Reflection.ReflectionTypeLoadException:
Невозможно загрузить один или несколько
запрашиваемые типы. Получить
Свойство LoaderExceptions для более
информация.
Я предположил, что приведенный выше код ПРОСТО выполнял рефлексию и "смотрел" на библиотеку ... но это своего рода пример принципа неопределенности Гейзенберга, посредством которого просмотр библиотеки и объектов в ней фактически пытается создать экземпляр их каким-то образом?
Спасибо,
Max