使用Roslyn查找属性"invocations"

Jos*_*rty 9 c# properties roslyn

我正在尝试构建C#方法和属性的调用图.这实质上意味着我搜索项目MethodDeclarationSyntaxPropertyDeclarationSyntax节点.然后,我通过以下方式查找方法调用,在这些节点之间建立连接:

SyntaxNode node = ...; //Some syntax node
var methodInvocations = node.DescendantNodesAndSelf().OfType<InvocationExpressionSyntax>();
//Process these method invocations
Run Code Online (Sandbox Code Playgroud)

是否有类似的方法或推荐的方法来查找所有属性"调用"?我相信C#编译器会在编译时将属性分解为Getter和Setter函数.

使用Roslyn检测属性使用的最佳方法是什么?

Kev*_*lch 6

Roslyn模型遵循源,而不是IL,因此不会表示对get和set方法的单独调用.

为此,您需要找到所有MemberAccessExpressionIdentifierNameSyntax节点并调用GetSymbolInfo以查看它们是否引用该属性.

或者,您应该考虑提升级别以使用工作区模型并调用FindReferencesAPI.