在编写Roslyn分析器或VS扩展时,有没有办法存储数据?

时间:2016-01-12 22:57:14

标签: roslyn roslyn-code-analysis

我正在编写一个Roslyn分析器,我需要存储一些数据,因此我的分析器可以在它们之间共享数据。或者我想保存我的分析器的状态,并再次想要将一些数据保存到数据库或写入文件。使用带有代码修复模板的Analyzer时,是否有任何存储数据的选项?

2 个答案:

答案 0 :(得分:2)

@Srivatsn Narayanan提到的问题将增加分析器之间共享资源的能力。但这并不意味着你可以分享国家。

要使状态在分析器之间有用,您需要在不存在的分析器之间存在某种依赖关系或执行顺序保证。

PS: 您可以要求添加对此类保证的支持,但由于这会使整个系统变得更加复杂,并且有一个解决方法,作者可以自己做(通过创建一个分析器并在那里做所有事情)可能很快就会得到支持

答案 1 :(得分:1)

目前没有简单的API可以跨分析器实例共享状态。我们正在讨论在this issue中添加此类功能。但是,只要您拥有一个暴露静态ConditionalWeakTable的类型并将数据存储在那里并在您的分析器之间共享,那么API可以简单地实现。你需要小心确保你没有泄漏汇编。

模板生成的分析器是一个可移植的库项目,因此无法访问许多文件\ db API。您可以将分析器转换为面向.NET 4.5.2的项目,然后使用这些API。但是,我强烈建议在可能的情况下避免这种情况有两个原因 - 一个是分析器将在VS中的每次击键时执行,并进行db调用,这通常会降低性能。第二个是非便携式分析器将特定于VS并且无法运行ASP.NET 5或.NET CLI