小编T. *_*Tam的帖子

使用 Roslyn 查找特定方法的所有方法调用

我正在使用 Roslyn 开发代码分析器,我当前的任务是查找程序集中未使用的所有内部方法。

我从 a 开始MethodDeclarationSyntax并从中得到符号。然后,我使用FindCallersAsyncin 中的方法SymbolFinder,但即使我在程序集中某处调用相关方法,它也会返回一个空集合。请参阅下面的代码。

protected override void Analyze(SyntaxNodeAnalysisContext context)
{
    NodeToAnalyze = context.Node;
    var methodDeclaration = NodeToAnalyze as MethodDeclarationSyntax;

    if (methodDeclaration == null)
        return;

    var methodSymbol = context.SemanticModel.GetDeclaredSymbol(methodDeclaration) as ISymbol;

    if (methodSymbol.DeclaredAccessibility != Accessibility.Internal)
        return;

    var solutionPath = GetSolutionPath();

    var msWorkspace = MSBuildWorkspace.Create();
    var solution = msWorkspace.OpenSolutionAsync(solutionPath).Result;

    var callers = SymbolFinder.FindCallersAsync(symbol, solution).Result;  // Returns empty collection.

    ...
}
Run Code Online (Sandbox Code Playgroud)

我在这里看到了类似的代码,但在该示例中,方法符号是使用GetSymbolInfo以下方法获得的InvocationExpressionSyntax

//Get the syntax node for the first …
Run Code Online (Sandbox Code Playgroud)

c# roslyn roslyn-code-analysis

5
推荐指数
1
解决办法
4630
查看次数

标签 统计

c# ×1

roslyn ×1

roslyn-code-analysis ×1