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 ReflectionTypeLoadExceptionao 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?