Estoy tratando de entender las diferencias entre Assembly.Load y Assembly.ReflectionOnlyLoad.C# Assembly.Load vs Assembly.ReflectionOnlyLoad
En el siguiente código que estoy tratando de encontrar todos los objetos de un montaje que se indica que heredan de una interfaz determinada:
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);
}
}
Este código funciona bien para mí, pero yo estaba haciendo algunas investigaciones en otra posiblemente mejores alternativas y se encontró con el método Assembly.ReflectionOnlyLoad().
Supuse que ya que no estoy de cargar o ejecutar cualquiera de los objetos, esencialmente sólo en la consulta de sus definiciones que podría utilizar ReflectionOnlyLoad para un aumento de rendimiento ligero ...
Pero resulta que cuando Assembly.Load cambiar a Assembly.ReflectionOnlyLoad me sale el siguiente error cuando se llama a assembly.GetTypes():
System.Reflection.ReflectionTypeLoadException:
No se puede cargar uno o más de los tipos solicitados . Recupere la propiedad LoaderExceptions para obtener más información sobre .
que supone que el código anterior fue haciendo precisamente la reflexión y "mirar" la biblioteca ... pero esto es una especie de instancia del principio de incertidumbre de Heisenberg el que busca en la biblioteca y los objetos en ella es en realidad tratando de crear una instancia de alguna manera?
Gracias, Max