Suchen Sie nach Typen, die von INamedTypeSymbol erben

9

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:

%Vor%

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.

    
JoshVarty 28.08.2015, 01:50
quelle

2 Antworten

3

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)

    
Jony Adamit 04.09.2015, 14:39
quelle
0

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%     
Nick Harrison 06.08.2016 16:19
quelle

Tags und Links