我们如何从Roslyn的代码分析器访问完整的Visual Studio解决方案?
我一直在尝试语义分析而没有太多帮助。
var sol =
((Microsoft.CodeAnalysis.Diagnostics.WorkspaceAnalyzerOptions)context.Options).Workspace.CurrentSolution;
这是我使用intellisense提出的,但这总是给出一个NULL值。
答案 0 :(得分:2)
一般情况下,你不能。分析器作为csc和vbc中命令行构建的一部分运行,它们没有工作区或解决方案的概念。
我们正在考虑添加一个允许访问Solution
的VS特定分析器API,但是对于Roslyn的1.0版本,没有支持的方法可以这样做。
答案 1 :(得分:0)
目前WorkspaceAnalyzerOptions
是internal sealed
。可以将context.Options
与reflection
一起使用。 强悍,但可以正常工作。
Solution solution =
((HostWorkspaceServices)context
.Options
.GetType()
.GetRuntimeProperty("Services")
.GetValue(context.Options))
.Workspace
.CurrentSolution;
注意,编译器会随之发出警告:
RS1022更改诊断分析器类型,以删除对类型“ Microsoft.CodeAnalysis.Host.HostWorkHostServices,Microsoft.CodeAnalysis.Solution,Microsoft.CodeAnalysis.Workspace”的所有直接访问。