如何在.NET代码分析器中获取解决方案路径

Mor*_*sen 8 .net c# roslyn

如何访问Roslyn代码分析器中编译的项目/解决方案的文件路径?我需要根据相对于代码存储的某些spec文件验证代码.不起作用的事情:

SyntaxTreeAnalysisContext.Tree.FilePath
Assembly.GetExecutingAssembly().Location
AppDomain.CurrentDomain.BaseDirectory
Environment.CurrentDirectory
Path.GetFullPath(relativePath)
Run Code Online (Sandbox Code Playgroud)

SLa*_*aks 5

分析器存在于工作区级别以下(它们由编译器直接运行),因此解决方案可能不存在。

由于复杂的原因,它们不是由 MEF 创建的,因此即使它确实存在,也没有简单的方法来获取它。

从 VS 内部,您可以找到全局服务提供商(例如ServiceProvider.GlobalProvider),然后获取SComponentModel(VS 自己的 MEF 图的根)并VisualStudioWorkspace从中获取 Roslyn 的。请注意,这是一种有点脆弱的方法,并且在 VS 之外根本不起作用。

即使在 VS 内,这也会以奇怪的方式破坏预览窗格、杂项文件和不属于全局解决方案一部分的其他上下文中的分析。