Roslyn:诊断中的当前工作空间,带有代码修复项目

Mic*_*dda 4 c# roslyn

如何在代码修复项目的诊断中获取有关当前工作空间的信息(例如项目路径,解决方案路径)?

我正在实现类型为ISyntaxNodeAnalyzer的Diagnostic

我需要访问SymbolFinder.FindImplementationsAsync,但为此,我需要Solution实例

编辑:我有这样的代码:

var syntax = (LocalDeclarationStatementSyntax) node;
var type = syntax.Declaration.Type;
var typeSymbol = semanticModel.GetTypeInfo(type).ConvertedType;
Run Code Online (Sandbox Code Playgroud)

我想找出typeSymbol的所有用法/参考.TypeSymbol表示位于源代码中的Class.

为此,我想使用SymbolFinder,但SymbolFinder的方法需要Solution的实例...在旧版本的Roslyn中,Document作为诊断的方法参数给出,您可以进入项目和解决方案.

Mat*_*ren 6

在实现诊断分析器时,目前没有获得工作空间或进行多项目分析的方法,因为这些方法需要能够仅使用命令行编译器针对单个编译运行.但是,一旦确定诊断,您就可以在代码修复提供程序中执行此操作.

如果您只想找到一个类实现另一个类的所有位置,您可以创建一个编译范围的诊断分析器并在决定诊断之前检查所有声明.您可以通过实现ICompilationStartedAnalyzer和ICompilationEndedAnalyzer来完成此操作.