C# 如何在解决方案中列出从特定类型继承的所有类型?
我试图获取VS解决方案中从特定类型继承的所有类型的列表。 下面的代码似乎列出了vs解决方案中的所有类,但不确定如何按inhertance筛选它们:C# 如何在解决方案中列出从特定类型继承的所有类型?,c#,roslyn,C#,Roslyn,我试图获取VS解决方案中从特定类型继承的所有类型的列表。 下面的代码似乎列出了vs解决方案中的所有类,但不确定如何按inhertance筛选它们: var workspace = MSBuildWorkspace.Create(); CancellationToken cancellationToken = default(CancellationToken); var solution = await workspace.OpenSolutionAsync(path, cancellation
var workspace = MSBuildWorkspace.Create();
CancellationToken cancellationToken = default(CancellationToken);
var solution = await workspace.OpenSolutionAsync(path, cancellationToken);
Project project = solution.Projects.First(p => p.Name == "WebApplication1");
var compilation = await project.GetCompilationAsync();
var classes = compilation.
GlobalNamespace.
GetNamespaceMembers().
SelectMany(x => x.GetMembers());
你在找我
使用您的示例,它看起来像:
var workspace = MSBuildWorkspace.Create();
CancellationToken cancellationToken = default(CancellationToken);
var solution = await workspace.OpenSolutionAsync(path, cancellationToken);
INamedTypeSymbol symbol = ... //Find the symbol for the type you're interested interested
var results = await SymbolFinder.FindDerivedClassesAsync(symbol, solution);
请注意,虽然此示例是针对类的,但是SymbolFinder
具有用于各种场景的方法,包括查找接口的实现。您正在查找的
使用您的示例,它看起来像:
var workspace = MSBuildWorkspace.Create();
CancellationToken cancellationToken = default(CancellationToken);
var solution = await workspace.OpenSolutionAsync(path, cancellationToken);
INamedTypeSymbol symbol = ... //Find the symbol for the type you're interested interested
var results = await SymbolFinder.FindDerivedClassesAsync(symbol, solution);
请注意,虽然这个示例是针对类的,但是
SymbolFinder
具有用于各种场景的方法,包括查找接口的实现。非常感谢。Josh,您很快就解决了这个问题。关于Roslyn我应该知道哪些好的资源?谷歌搜索没有多大帮助,因为搜索通常会登陆Roslyn的源代码库,没有多大帮助。你有什么好书推荐吗?再次感谢。不幸的是,没有太多的文档,但我在学习Roslyn时写了一些关于它的博客文章:这是一套很好的文章。非常感谢。非常感谢。乔希,你这么快就把这个问题搞定了。关于Roslyn我应该知道哪些好的资源?谷歌搜索没有多大帮助,因为搜索通常会登陆Roslyn的源代码库,没有多大帮助。你有什么好书推荐吗?再次感谢。不幸的是,没有太多的文档,但我在学习Roslyn时写了一些关于它的博客文章:这是一套很好的文章。非常感谢。