से विरासत का पता लगाएं एक INamedTypeSymbol
(है कि एक संदर्भित विधानसभा से आता है, नहीं स्रोत) को देखते हुए मैं कैसे सभी प्रकार है कि इस प्रकार के से विरासत (दोनों स्रोत और संदर्भित विधानसभाओं में) मिल सकती है?प्रकार है कि दिए गए INamedTypeSymbol
मेरे विशेष मामले में, मैं NUnit.Framework.TestAttribute
से प्राप्त होने वाले सभी प्रकार की तलाश में हूं। इस प्रकार मैं नामित प्रकार प्रतीक तक पहुँच प्राप्त कर सकते हैं:
var ws = MSBuildWorkspace.Create();
var soln = ws.OpenSolutionAsync(@"C:\Users\...\SampleInheritanceStuff.sln").Result;
var proj = soln.Projects.Single();
var compilation = proj.GetCompilationAsync().Result;
string TEST_ATTRIBUTE_METADATA_NAME = "NUnit.Framework.TestAttribute";
var testAttributeType = compilation.GetTypeByMetadataName(TEST_ATTRIBUTE_METADATA_NAME);
//Now how do I find types that inherit from this type?
मैं SymbolFinder
, Compilation
और INamedTypeSymbol
पर एक नज़र लिया है, लेकिन मैं किसी भी भाग्य नहीं किया है।
संपादित करें:FindDerivedClassesAsync
विधि मेरी आवश्यकता के करीब दिखती है। (मुझे 100% यकीन नहीं है कि यह संदर्भित असेंबली में व्युत्पन्न कक्षाएं पाता है)। हालांकि यह आंतरिक है, इसलिए मैंने an issue खोला है।
क्या आपके पास "असेंबली" ऑब्जेक्ट का संदर्भ हो सकता है? –
यदि आपके पास असेंबली ऑब्जेक्ट हो सकता है तो आप GetTypies विधि का उपयोग कर सकते हैं और विधि IsAssignable से उपयोग कर फ़िल्टर कर सकते हैं –
'विधानसभा' ऑब्जेक्ट प्राप्त करना आसान नहीं होगा, और मुझे पता है कि प्रतिबिंब के साथ करना संभव है, लेकिन मैं वास्तव में पसंद करूंगा Roslyn का उपयोग करने के लिए। – JoshVarty