我可以分析项目 (.csproj) 和解决方案 (.sln) 与 Roslyn 的关系吗?
Can I analyze Project (.csproj) and Solution (.sln) relationships with Roslyn?
我刚开始使用 Roslyn,因为我想开发一些专注于生成依赖关系图的静态分析宠物项目(输出将是 .dot 文件,用 Graphviz 编译成 .pdf)。
我可以看到在每个文件的基础上分析代码的潜力,但我需要以下操作(或多或少):
- 给定一个
solution.sln
文件,找到它引用的所有 project.csproj
个文件;
- 给定一个
project.csproj
文件,找到它引用的所有 sourcecode.cs
个文件;
- 照常使用 Roslyn 解析这些文件;
- 有一个解决方案范围的解析树或类似的东西,其中跨越多个项目的名称空间将其 类 组合在一起。
具体来说,我的问题是:我可以使用 Roslyn 执行操作 1、2 和 4,还是应该改用其他工具/技术?有什么建议吗?
P.S。我看到有一个 VisualStudioWorkspace
,但我还不知道我必须做什么才能使用它。
是;这当然是可能的。
VisualStudioWorkspace
是在 VS 内部使用的;您应该只在 VS 插件中使用它来访问当前解决方案。
要自己加载解决方案,请使用 MSBuildWorkspace
。
然后,您将要为每个项目合并 Compilation
中的符号。
我刚开始使用 Roslyn,因为我想开发一些专注于生成依赖关系图的静态分析宠物项目(输出将是 .dot 文件,用 Graphviz 编译成 .pdf)。
我可以看到在每个文件的基础上分析代码的潜力,但我需要以下操作(或多或少):
- 给定一个
solution.sln
文件,找到它引用的所有project.csproj
个文件; - 给定一个
project.csproj
文件,找到它引用的所有sourcecode.cs
个文件; - 照常使用 Roslyn 解析这些文件;
- 有一个解决方案范围的解析树或类似的东西,其中跨越多个项目的名称空间将其 类 组合在一起。
具体来说,我的问题是:我可以使用 Roslyn 执行操作 1、2 和 4,还是应该改用其他工具/技术?有什么建议吗?
P.S。我看到有一个 VisualStudioWorkspace
,但我还不知道我必须做什么才能使用它。
是;这当然是可能的。
VisualStudioWorkspace
是在 VS 内部使用的;您应该只在 VS 插件中使用它来访问当前解决方案。
要自己加载解决方案,请使用 MSBuildWorkspace
。
然后,您将要为每个项目合并 Compilation
中的符号。