DiagnosticAnalyzer 和 CodeFixProvider 如何进入工作区? (罗斯林)

How to get to Workspace in DiagnosticAnalyzer and CodeFixProvider? (Roslyn)

我想检查一下appsettings.json中是否添加了一个Method(Like Logger)的配置。如果没有,那么我想通过代码修复来添加它。

我正在尝试访问工作区,以便我可以访问其中的文档。但是我找不到获取当前工作区的方法。

我试过AdhocWorkspace但是里面的项目列表是空的

var solution = new AdhocWorkspace().CurrentSolution;

CodeFixProvider 中,您可以从提供给 RegisterCodeFixesAsync 方法的 CodeFixContext 访问工作区:

public override Task RegisterCodeFixesAsync(CodeFixContext context)
{
    var workspace = context.Document.Project.Solution.Workspace;
    //...
}

对于 DiagnosticAnalyzer,这是另一回事。分析器使用编译,而不是特定项目或文档。实施诊断分析器时无法到达工作区,因为分析器需要能够 运行 仅使用命令行编译器针对单个编译。