Ich versuche, eine Assembly nach Typen zu scannen, die eine bestimmte Schnittstelle implementieren, indem ich folgenden Code verwende:
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;
}
Mein Problem ist, dass ich in einigen Fällen ReflectionTypeLoadException
beim Aufruf eine bekomme asm.GetTypes()
, z. B. wenn die Assembly Typen enthält, die auf eine Assembly verweisen, die derzeit nicht verfügbar ist.
In meinem Fall interessieren mich die Typen, die das Problem verursachen, nicht. Die Typen, nach denen ich suche, benötigen keine nicht verfügbaren Assemblys.
Die Frage ist: Ist es möglich, die Typen, die die Ausnahme verursachen, irgendwie zu überspringen / zu ignorieren, aber dennoch die anderen in der Assembly enthaltenen Typen zu verarbeiten?
AppDomain.CurrentDomain.GetAssemblies()
, dies funktioniert auf meiner Maschine, aber nicht auf anderen Maschinen. Warum zum Teufel sollten einige Assemblys aus meiner ausführbaren Datei sowieso nicht lesbar / geladen sein?