使用Roslyn提取所有解决方案符号的最佳方法

时间:2015-11-30 15:01:19

标签: .net code-generation roslyn

我们过去开发了一种基于encodeom顶级的代码生成工具,可以自动为我们的解决方案生成一些代码。解决方案是解析完整的代码树以存储我们工具所需的自定义信息,但我总是发现它与VS在后台已经做的完全重复。随着Roslyn的推出,我期望有更好的方法从编译器中提取符号定义,允许我直接查询解决方案符号'表格,无需我存储我们需要的自定义数据。无论如何我们都不需要更改代码,我们只需要读取对象定义,如类,特定方法,元数据等。

我的问题是,阅读这些符号需要什么?我是否需要再次解析所有寻找这些项目/文档的项目/文档,或者是否有允许我提取这些符号的API?

2 个答案:

答案 0 :(得分:1)

您可以注册基于符号的操作(使用AnalysisContext.RegisterSymbolAction),只要分析符号,就会调用该操作。但是因为你不只是想要单独的符号,所以你最好注册一个编译开始动作,它会在内部注册一个符号动作。这样,在编译结束操作中,您将拥有属于整个项目的所有符号信息。

答案 1 :(得分:1)

您正在寻找SymbolFinder class,您可以使用它来查找(MEF导入的)VisualStudioWorkspace中每个项目的SemanticModel中符号的所有引用。