在roslyn中访问VS完整解决方案
Accessing VS complete solution in roslyn
我们如何从 Roslyn
中的代码分析器访问完整的 visual studio 解决方案?
我一直在尝试语义分析,但没有太多帮助。
var sol = ((Microsoft.CodeAnalysis.Diagnostics.WorkspaceAnalyzerOptions)context.Options)
.Workspace.CurrentSolution;
这是我使用 intellisense 想到的,但这总是给出一个 null 值。
一般来说,你不能。分析器 运行 作为 csc 和 vbc 中命令行构建的一部分,没有工作区或解决方案的概念。
我们正在考虑添加一个 VS 特定的分析器 API 以允许访问 Solution
,但是对于 Roslyn 的 1.0 版本,没有支持的方法来这样做。
暂时 WorkspaceAnalyzerOptions
是 internal sealed
。可以将 context.Options
与 reflection
一起使用。 Hacky,但有效。
Solution solution =
((HostWorkspaceServices)context
.Options
.GetType()
.GetRuntimeProperty("Services")
.GetValue(context.Options))
.Workspace
.CurrentSolution;
注意,编译器会给出警告:
RS1022 Change diagnostic analyzer type to remove all direct accesses to type(s) 'Microsoft.CodeAnalysis.Host.HostWorkspaceServices, Microsoft.CodeAnalysis.Solution, Microsoft.CodeAnalysis.Workspace'
我们如何从 Roslyn
中的代码分析器访问完整的 visual studio 解决方案?
我一直在尝试语义分析,但没有太多帮助。
var sol = ((Microsoft.CodeAnalysis.Diagnostics.WorkspaceAnalyzerOptions)context.Options)
.Workspace.CurrentSolution;
这是我使用 intellisense 想到的,但这总是给出一个 null 值。
一般来说,你不能。分析器 运行 作为 csc 和 vbc 中命令行构建的一部分,没有工作区或解决方案的概念。
我们正在考虑添加一个 VS 特定的分析器 API 以允许访问 Solution
,但是对于 Roslyn 的 1.0 版本,没有支持的方法来这样做。
暂时 WorkspaceAnalyzerOptions
是 internal sealed
。可以将 context.Options
与 reflection
一起使用。 Hacky,但有效。
Solution solution =
((HostWorkspaceServices)context
.Options
.GetType()
.GetRuntimeProperty("Services")
.GetValue(context.Options))
.Workspace
.CurrentSolution;
注意,编译器会给出警告:
RS1022 Change diagnostic analyzer type to remove all direct accesses to type(s) 'Microsoft.CodeAnalysis.Host.HostWorkspaceServices, Microsoft.CodeAnalysis.Solution, Microsoft.CodeAnalysis.Workspace'