Estou tentando escanear um assembly em busca de tipos que implementam uma interface específica usando um código semelhante a este:
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;
}
Meu problema é que recebo um ReflectionTypeLoadException
ao chamar asm.GetTypes()
em alguns casos, por exemplo, se o assembly contém tipos que fazem referência a um assembly que não está disponível no momento.
No meu caso, não estou interessado nos tipos que causam o problema. Os tipos que procuro não precisam de assemblies não disponíveis.
A questão é: é possível pular / ignorar de alguma forma os tipos que causam a exceção, mas ainda assim processar os outros tipos contidos na montagem?
AppDomain.CurrentDomain.GetAssemblies()
, isso funciona na minha máquina, mas não em outras máquinas. Por que diabos alguns assemblies do meu executável não podem ser lidos / carregados de qualquer maneira?