J'essaie de scanner un assembly pour les types implémentant une interface spécifique en utilisant un code similaire à celui-ci:
public List<Type> FindTypesImplementing<T>(string assemblyPath)
{
var matchingTypes = new List<Type>();
var asm = Assembly.LoadFrom(assemblyPath);
foreach (var t in asm.GetTypes())
{
if (typeof(T).IsAssignableFrom(t))
matchingTypes.Add(t);
}
return matchingTypes;
}
Mon problème est que j'obtiens un ReflectionTypeLoadException
lors de l'appel asm.GetTypes()
dans certains cas, par exemple si l'assembly contient des types référençant un assembly qui n'est actuellement pas disponible.
Dans mon cas, je ne suis pas intéressé par les types qui causent le problème. Les types que je recherche n'ont pas besoin des assemblys non disponibles.
La question est la suivante: est-il possible d'ignorer / ignorer d'une manière ou d'une autre les types qui provoquent l'exception tout en traitant les autres types contenus dans l'assembly?
AppDomain.CurrentDomain.GetAssemblies()
, cela fonctionne sur ma machine mais pas sur d'autres machines. Pourquoi diable certains assemblys de mon exécutable ne seraient-ils pas lisibles / chargés de toute façon ??