Cho một số INamedTypeSymbol
(xuất phát từ một hội đồng tham chiếu chứ không phải nguồn) làm cách nào tôi có thể tìm thấy tất cả các loại (trong cả hai nguồn nguồn và tham chiếu cụm).Tìm các loại được kế thừa từ INamedTypeSymbol
Trong trường hợp cụ thể của tôi, tôi đang tìm tất cả các loại được kế thừa từ NUnit.Framework.TestAttribute
. Tôi có thể được tiếp cận với các biểu tượng kiểu đặt tên như sau:
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?
Tôi đã lấy một cái nhìn tại SymbolFinder
, Compilation
và INamedTypeSymbol
nhưng tôi đã không có bất kỳ may mắn.
Chỉnh sửa: Phương thức FindDerivedClassesAsync
trông gần với những gì tôi cần. (Tôi không chắc chắn 100% rằng nó tìm thấy các lớp dẫn xuất trong các assembly được tham chiếu). Tuy nhiên nó là nội bộ, vì vậy tôi đã mở an issue.
Bạn có thể tham chiếu đến đối tượng "Lắp ráp" không? –
Nếu bạn có thể có đối tượng assembly, bạn có thể sử dụng phương thức GetTypies và lọc bằng phương thức IsAssignableFrom –
Nó sẽ không dễ dàng để có được đối tượng 'Assembly', và tôi biết nó có thể làm với sự phản chiếu, nhưng tôi thực sự thích để sử dụng Roslyn. – JoshVarty