在roslyn中访问VS完整解决方案

时间:2015-06-18 14:02:07

标签: c# visual-studio-2015 roslyn

我们如何从Roslyn的代码分析器访问完整的Visual Studio解决方案?

我一直在尝试语义分析而没有太多帮助。

   var sol = 
  ((Microsoft.CodeAnalysis.Diagnostics.WorkspaceAnalyzerOptions)context.Options).Workspace.CurrentSolution;

这是我使用intellisense提出的,但这总是给出一个NULL值。

2 个答案:

答案 0 :(得分:2)

一般情况下,你不能。分析器作为csc和vbc中命令行构建的一部分运行,它们没有工作区或解决方案的概念。

我们正在考虑添加一个允许访问Solution的VS特定分析器API,但是对于Roslyn的1.0版本,没有支持的方法可以这样做。

答案 1 :(得分:0)

目前WorkspaceAnalyzerOptionsinternal sealed。可以将context.Optionsreflection一起使用。 强悍,但可以正常工作。

Solution solution =
    ((HostWorkspaceServices)context
    .Options
    .GetType()
    .GetRuntimeProperty("Services")
    .GetValue(context.Options))
    .Workspace
    .CurrentSolution;

注意,编译器会随之发出警告:

  

RS1022更改诊断分析器类型,以删除对类型“ Microsoft.CodeAnalysis.Host.HostWorkHostServices,Microsoft.CodeAnalysis.Solution,Microsoft.CodeAnalysis.Workspace”的所有直接访问。