C# “寻找财产”;援引;和罗斯林

C# “寻找财产”;援引;和罗斯林,c#,properties,roslyn,C#,Properties,Roslyn,我试图建立一个C#方法和属性的调用图。这本质上意味着我在项目中搜索MethodDeclarationSyntax和PropertyDeclarationSyntax节点。然后,通过以下途径查找方法调用,在这些节点之间建立连接: SyntaxNode node = ...; //Some syntax node var methodInvocations = node.DescendantNodesAndSelf().OfType<InvocationExpressionSyntax>

我试图建立一个C#方法和属性的调用图。这本质上意味着我在项目中搜索
MethodDeclarationSyntax
PropertyDeclarationSyntax
节点。然后,通过以下途径查找方法调用,在这些节点之间建立连接:

SyntaxNode node = ...; //Some syntax node
var methodInvocations = node.DescendantNodesAndSelf().OfType<InvocationExpressionSyntax>();
//Process these method invocations
SyntaxNode=//某些语法节点
var methodInvocations=node.degenantnodesandself().OfType();
//处理这些方法调用
是否也有类似的方法或推荐的方法来查找所有属性“调用”?我相信C#编译器在编译时会将属性分解为Getter和Setter函数


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

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

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


可选地,你应该考虑增加一个级别来使用工作区模型,并调用<代码> FixRebug < /Case> API。我看到一些处理非源代码(属性getter/setter)的公共API:不,我们一直都有这些API,因为有时候无论如何都需要找到它们。例如,如果您有一个属性X,则需要知道名称get_X和set_X现在无效。我们并不是只表示源代码中出现的东西(我们也表示隐式转换),但一般来说,遵循源代码的哲学仍然适用。