我可以分析项目 (.csproj) 和解决方案 (.sln) 与 Roslyn 的关系吗?

Can I analyze Project (.csproj) and Solution (.sln) relationships with Roslyn?

我刚开始使用 Roslyn,因为我想开发一些专注于生成依赖关系图的静态分析宠物项目(输出将是 .dot 文件,用 Graphviz 编译成 .pdf)。

我可以看到在每个文件的基础上分析代码的潜力,但我需要以下操作(或多或少):

  1. 给定一个 solution.sln 文件,找到它引用的所有 project.csproj 个文件;
  2. 给定一个 project.csproj 文件,找到它引用的所有 sourcecode.cs 个文件;
  3. 照常使用 Roslyn 解析这些文件;
  4. 有一个解决方案范围的解析树或类似的东西,其中跨越多个项目的名称空间将其 类 组合在一起。

具体来说,我的问题是:我可以使用 Roslyn 执行操作 1、2 和 4,还是应该改用其他工具/技术?有什么建议吗?

P.S。我看到有一个 VisualStudioWorkspace,但我还不知道我必须做什么才能使用它。

是;这当然是可能的。

VisualStudioWorkspace 是在 VS 内部使用的;您应该只在 VS 插件中使用它来访问当前解决方案。

要自己加载解决方案,请使用 MSBuildWorkspace。 然后,您将要为每个项目合并 Compilation 中的符号。