Je suis en train d'essayer de comprendre les différences entre l'Assemblage.De la charge et de l'Assemblée.ReflectionOnlyLoad.
Dans le code ci-dessous j'essaie de trouver tous les objets dans une assemblée qui hérite 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 très bien pour moi, mais je faisais des recherches sur d'autres éventuellement de meilleures solutions de rechange et est venu à travers l'Assemblée.ReflectionOnlyLoad() la méthode.
Je suppose que depuis que je ne suis pas du chargement ou de l'exécution de l'un quelconque des objets, essentiellement à l'interrogation sur leurs définitions que j'ai pu utiliser ReflectionOnlyLoad une légère augmentation de la performance...
Mais il s'avère que lorsque je change l'Assemblée.Charge à l'Assemblée.ReflectionOnlyLoad j'obtiens l'erreur suivante lors de l'appel de l'assemblée.GetTypes():
Système.De la réflexion.ReflectionTypeLoadException: Impossible de charger un ou plusieurs de la types requis. Récupérer le LoaderExceptions de la propriété pour plus d' de l'information.
Je suppose que le code ci-dessus ne faisais la réflexion et à "regarder" la bibliothèque... mais est-ce une sorte d'instance du Principe d'Incertitude de Heisenberg en vertu de laquelle la recherche à la bibliothèque et les objets, il est effectivement tentant de les instancier une certaine façon?
Merci, Max