Gegeben ein INamedTypeSymbol
(das von einer referenzierten Assembly kommt, nicht von der Quelle), wie kann ich alle Typen (sowohl in source als auch in referenzierten Assemblys ) finden, die von diesem Typ erben?
In meinem speziellen Fall suche ich nach allen Typen, die von NUnit.Framework.TestAttribute
erben. Ich kann wie folgt auf das benannte Symbol zugreifen:
Ich habe mir SymbolFinder
, Compilation
und INamedTypeSymbol
angesehen, aber ich hatte kein Glück.
Bearbeiten: Die FindDerivedClassesAsync
Methode sieht in der Nähe, was ich brauche. (Ich bin nicht 100% sicher, dass es abgeleitete Klassen in referenzierten Assemblys findet). Es ist jedoch intern, also habe ich ein Problem geöffnet.
Das FindDerivedClassesAsync
ist in der Tat, was Sie suchen.
Es findet abgeleitete Klassen in referenzierten Assemblys, wie Sie im Quelltext für DependentTypeFinder
(beachten Sie die Variable locationsInMetadata
).
Wie Sie es verwenden können, können Sie es immer mit der Reflexion in der Zwischenzeit tun:
%Vor%( Code von Tunnel Vision Laboratories Github ausgeliehen )
Viel Glück!
UPDATE:
Diese Methode wurde inzwischen veröffentlicht. (Quelle)
Sie können diese Informationen mit dem SemanticModel abrufen, das von der Kompilierung verfügbar gemacht wurde
%Vor%Dies gibt Ihnen eine Liste aller Basisklassen sowie jeder Schnittstelle, die jede Basisklasse implementiert. Sie können dann auf das INamedTypeSymbol filtern, an dem Sie interessiert sind:
%Vor%