給定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。
您可以參考「Assembly」對象嗎? –
如果你可以擁有程序集對象,那麼你可以使用方法GetTypies並使用方法IsAssignableFrom來過濾 –
獲取'Assembly'對象並不容易,而且我知道可以使用反射,但是我更喜歡使用Roslyn。 – JoshVarty