Sto cercando di scansionare un assembly per i tipi che implementano un'interfaccia specifica utilizzando un codice simile a questo:
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;
}
Il mio problema è che ottengo un ReflectionTypeLoadException
quando chiamo asm.GetTypes()
in alcuni casi, ad esempio se l'assembly contiene tipi che fanno riferimento a un assembly che attualmente non è disponibile.
Nel mio caso, non sono interessato ai tipi che causano il problema. I tipi che cerco non necessitano degli assembly non disponibili.
La domanda è: è possibile in qualche modo saltare / ignorare i tipi che causano l'eccezione ma elaborare comunque gli altri tipi contenuti nell'assembly?
AppDomain.CurrentDomain.GetAssemblies()
, funziona sulla mia macchina ma non su altre macchine. Perché diamine alcuni assembly dal mio eseguibile non sarebbero comunque leggibili / caricati ??