【发布时间】:2016-03-04 06:18:53
【问题描述】:
我们过去开发了一个基于 codedom 的代码生成工具,用于为我们的解决方案自动生成一些代码。解决方案是解析完整的代码树以存储我们工具所需的自定义信息,但我总是发现它与 VS 已经在后台所做的完全重复。随着 Roslyn 的引入,我期望有一种更好的方法从编译器中提取符号定义,允许我直接查询解决方案符号表,而无需我存储自定义数据以满足我们的需求。无论如何我们都不需要更改代码,我们只需要读取对象定义,如类、特定方法、元数据等。
我的问题是,阅读这些符号需要什么?我是否需要再次解析所有项目/文档以查找这些符号,还是有一个 API 可以让我提取这些符号?
【问题讨论】:
-
你是写VS扩展还是独立工具?您正在寻找 Roslyn 的
SemanticModel。 -
我正在编写一个 VS 扩展是的,据我所知,它仍然需要遍历所有语法树并获取所有语义模型。我希望 Roslyn(或 VisualStudio Workspace)是否已经有一些 API 可以轻松访问这些信息。
-
您需要所有个符号吗?还是您需要找到某些类型的符号? (在您提到的评论中,您正在寻找派生类型作为示例)。是否还需要分析参数符号和局部变量?
-
我将需要其中的大部分(1000 多个定义)我们的生成器会自动执行一些前端开发,我们生成公开的服务、值对象定义等。当我们保存文件时,我们会检查哪种类型我们使用 T4 模板保存并生成相应客户端代码的对象。
-
所以不确定它是否已经回答,但是是的,VS 工作区已经可以为您提供符号 l 信息。正如@SLaks 所观察到的那样,这只是您以这种方式获取编译和行走符号的问题,或者如果这适合您的场景,则可以成为分析器。
标签: .net code-generation roslyn