作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
如何获取在 Roslyn 代码分析器中编译的项目/解决方案的文件路径?我需要根据相对于代码存储的一些规范文件来验证代码。不起作用的东西:
SyntaxTreeAnalysisContext.Tree.FilePath
Assembly.GetExecutingAssembly().Location
AppDomain.CurrentDomain.BaseDirectory
Environment.CurrentDirectory
Path.GetFullPath(relativePath)
最佳答案
分析器存在于工作区级别之下(它们由编译器直接运行),因此解决方案可能不存在。
由于复杂的原因,它们不是由 MEF 创建的,因此即使它确实存在,也没有简单的方法可以访问它。
在 VS 中,您可以找到全局服务提供者(例如,ServiceProvider.GlobalProvider
),然后获取 SComponentModel
(VS 自己的 MEF 图的根)并抓取Roslyn 的 VisualStudioWorkspace
来自于此。请注意,这是一种有点脆弱的方法,在 VS 之外根本不起作用。
即使在 VS 中,这也会以奇怪的方式中断预览 Pane 、杂项文件和其他不属于全局解决方案的上下文中的分析。
关于c# - 如何在 .NET 代码分析器中获取解决方案路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31796107/
我是一名优秀的程序员,十分优秀!