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

问题描述 投票:0回答:2

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

roslyn roslyn-code-analysis
2个回答
1
投票

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

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


2
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.