【问题标题】:How to get to Workspace in DiagnosticAnalyzer and CodeFixProvider? (Roslyn)如何在 DiagnosticAnalyzer 和 CodeFixProvider 中访问 Workspace? (罗斯林)
【发布时间】:2019-12-24 17:21:21
【问题描述】:

我想查看appsettings.json中是否添加了Method(Like Logger)的配置。如果没有,那我想通过 Code Fix 来添加。

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

我尝试使用AdhocWorkspace,但其中的项目列表为空

var solution = new AdhocWorkspace().CurrentSolution;

【问题讨论】:

  • not working 是什么意思?任何错误?什么不工作?
  • @KJSR 里面的项目列表是空的

标签: c# roslyn roslyn-code-analysis microsoft.codeanalysis


【解决方案1】:

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

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

对于DiagnosticAnalyzer,情况就不同了。分析器使用编译,而不是特定的项目或文档。实现诊断分析器时无法访问工作区,因为分析器需要能够仅使用命令行编译器针对单个编译运行。

【讨论】:

  • 谢谢,你的意思是没有办法在DiagnosticAnalyzer中得到Workspace
  • 是的,这正是我在回答中所说的。无法从诊断分析器访问工作区(至少,使用当前的 SDK 版本)。
  • 谢谢,只是与“稍微复杂一点”混淆了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-17
  • 1970-01-01
  • 2015-12-01
相关资源
最近更新 更多