J'essaie de comprendre les différences entre Assembly.Load et Assembly.ReflectionOnlyLoad.C# Assembly.Load vs Assembly.ReflectionOnlyLoad
Dans le code ci-dessous je tente de trouver tous les objets dans un ensemble donné héritant d'une interface donnée:
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);
}
}
Ce code fonctionne bien pour moi, mais je faisais des recherches dans d'autres possiblement de meilleures alternatives et rencontré la méthode Assembly.ReflectionOnlyLoad().
Je suppose que depuis que je ne suis pas charger ou d'exécuter l'un des objets, essentiellement juste interroger sur leurs définitions que je pourrais utiliser ReflectionOnlyLoad pour une légère augmentation de la performance ...
Mais il se trouve que quand je changer Assembly.Load à Assembly.ReflectionOnlyLoad je reçois l'erreur suivante quand il appelle assembly.GetTypes():
System.Reflection.ReflectionTypeLoadException:
Impossible de charger un ou plusieurs des types demandés. Récupérez la propriété LoaderExceptions pour plus d'informations .
Je suppose que le code ci-dessus était juste en train de faire la réflexion et « regarder » la bibliothèque ... mais est-ce une sorte d'instance de l'incertitude de Heisenberg Principe selon lequel la recherche à la bibliothèque et les objets qu'il est en réalité essayer de les instancier d'une manière ou d'une autre?
Merci, Max