1

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

4

2 回答 2

2

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

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

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

于 2016-01-13T01:05:39.320 回答
1

目前没有简单的 API 可以在分析器实例之间共享状态。我们正在讨论在本期中添加这样的功能。但是,该 API 的功能可以简单地通过您拥有一个公开静态 ConditionalWeakTable 并将您的数据存储在那里并在您的分析器之间共享的类型来实现。您确实需要小心以确保您没有泄漏编译。

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

于 2016-01-13T00:48:03.080 回答