如何访问Roslyn代码分析器中编译的项目/解决方案的文件路径?我需要根据相对于代码存储的某些spec文件验证代码.不起作用的事情:
SyntaxTreeAnalysisContext.Tree.FilePath
Assembly.GetExecutingAssembly().Location
AppDomain.CurrentDomain.BaseDirectory
Environment.CurrentDirectory
Path.GetFullPath(relativePath)
Run Code Online (Sandbox Code Playgroud)
分析器存在于工作区级别以下(它们由编译器直接运行),因此解决方案可能不存在。
由于复杂的原因,它们不是由 MEF 创建的,因此即使它确实存在,也没有简单的方法来获取它。
从 VS 内部,您可以找到全局服务提供商(例如ServiceProvider.GlobalProvider),然后获取SComponentModel(VS 自己的 MEF 图的根)并VisualStudioWorkspace从中获取 Roslyn 的。请注意,这是一种有点脆弱的方法,并且在 VS 之外根本不起作用。
即使在 VS 内,这也会以奇怪的方式破坏预览窗格、杂项文件和不属于全局解决方案一部分的其他上下文中的分析。