在DiagnosticAnalyzer的动作回调中,如何获取从中派生SyntaxNode的Document或Project?

问题描述 投票:0回答:1

我正在写一个DiagnosticAnalyzer,并为SyntaxNode注册SyntaxKind.Attribute动作。该属性为项目中的其他文件命名。

例如,被分析的代码可以包括

[RelatedFile("otherFileName.foo")] interface Whatever {...}

在我的分析回调中,我希望能够从正在分析的项目的角度访问相关文件的内容。所以,我需要:

  1. SyntaxNode中提取文件名。我可以做这个。
  2. 获取描述包含要分析的代码的文档的对象。我不知道该怎么做。
  3. 获取描述包含要分析的代码的项目的对象。我不知道该怎么做。
  4. 找出项目是否包含指定名称的文档。我可以做这个。
  5. 打开并解析或更新该文件的内容。我想我能做到这一点。

我陷入了步骤(2)和(3)。 (是的,我可能不会严格要求做第2步,但我仍然想知道如何。)

SyntaxNodeAnalysisContext参数,我可以得到Workspace对象,从那个Solution对象,以及从那个Project对象的集合。但我没有看到一种方法将特定的SyntaxNodeProjectDocument联系起来。

任何关于如何做到这一点的想法将不胜感激。

roslyn-code-analysis
1个回答
0
投票

我找到了:

Workspace workspace = ...;
SyntaxNode node = ...;
Document document = workspace.Solution.GetDocument(node.SyntaxTree);
Project project = document.Project;

我不知道为什么我之前没有看到。

© www.soinside.com 2019 - 2024. All rights reserved.