使用Roslyn查找从特定基类派生的类

本文关键字:基类 派生 Roslyn 查找 使用 | 更新日期: 2023-09-27 18:03:23

在本页中,建议使用下面的代码来查找从给定类型派生的类,但由于

下面的代码无法工作,因此

var symbol = _model.GetDeclaredSymbol(node);

返回isymsymbol,而不是预期的inamedtypessymbol。

在本页的常见问题解答中,对于获取变量声明的类型,建议使用以下代码段。但是,这也会在运行时抛出一个异常,表示转换为ILocalSymbol无效。

var type = ((ILocalSymbol)model.GetDeclaredSymbol(variableDeclarator)).Type;

我试着查看Roslyn的源代码来找出一种方法,并尝试了它们,但到目前为止还没有成功。

我想做的是,检测从EntityFramework的DbContext类派生的解决方案中的所有类。有人能告诉我怎么找到它吗?提前感谢!

使用Roslyn查找从特定基类派生的类

知道哪里出了问题。也许可以帮助别人不浪费太多时间。

ModelExtensions类。CodeAnalysis名称空间有一个名为GetDeclaredSymbol的方法声明。需要调用的方法是名称空间Microsoft.CodeAnalysis.CSharp中的CSharpExtensions类中的方法。如果你已经有一个using语句给微软。在类中的CodeAnalysis中,调用了ModelExtensions上的GetDeclaredSymbol方法,这就是我的情况。我花了不少时间才想明白。

这个方法在CSharpExtensions类中是应该被调用的:

public static INamedTypeSymbol GetDeclaredSymbol(
  this SemanticModel semanticModel, 
  BaseTypeDeclarationSyntax declarationSyntax, 
  CancellationToken cancellationToken = default(CancellationToken));