Я пытаюсь понять различия между 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 для более информация.
Я предположил, что приведенный выше код JUST делает отражение и "смотрит на" библиотеку... но это какой-то экземпляр принципа неопределенности Гейзенберга, при котором просмотр библиотеки и объектов в ней на самом деле пытается создать экземпляр они каким-то образом?
Спасибо, Макс