为Visual Studio编写解决方案分析器

时间:2017-04-16 22:34:29

标签: c# .net visual-studio roslyn

所以我需要的是为什么要为Visual Studio编写一个解决方案分析器,它可以:

  • 检测移动类并移动方法重构。
  • 在Visual Studio中显示推荐的重构。
  • 应用重构。

我有一个可以执行此操作的控制台应用程序(使用Roslyn编译器),但我想在Visual Studio中集成逻辑。从我所读到的,当前的代码修复/重构/分析器仅支持文档级别的重构,但对我来说,这不足以推荐上述重构之一的信息。我需要有关整个解决方案的信息。

所以我的问题是最好的方法是什么?你能推荐一个起点吗?一些与该主题相关的文章?任何建议都会对我有所帮助。

1 个答案:

答案 0 :(得分:2)

简答:使用Roslyn API没有合理的方法

长答案:

目前实现的api只允许分析人员了解当前编译中的内容(Visual Studio中的项目)。如果您从分析器中的RegisterCompilationAction方法中调用Initalize,您将能够查看编译中的所有符号。

为什么分析人员无法看到整个解决方案的范围?最简单的答案是:因为编译器不能,并且分析器在编译器内部运行。这样做是为了使分析器可以在没有安装Visual Studio的连续集成服务器上运行。 MSBuild读取解决方案文件,然后为每个项目调用一次编译器。编译器永远不会意识到项目依赖性,并且编译器团队不想参与该业务,他们很乐意将其留给MSBuild。

人们试图通过使用MSBuildWorkspace加载解决方案并尝试以这种方式查看项目中的文档来解决此问题。这偶尔会失败,因为MSBuildWorkspace不是线程安全的。它还会导致内存使用量猛增。人们已经尝试缓存MSBuildWorkspace个实例以部分解决此问题,但每次创建新编译时都需要使缓存失效(主要是除了最微不足道的更改之外)。基本上,沿着这条道路走下去充满痛苦并且没有支持。

有足够的人要求这个功能,我们认为我们最终需要做的事情。除非您愿意编写导入Visual Studio Workspace并尝试运行自己的分析引擎的Visual Studio扩展,否则今天没有合理的方法来实现它。请在https://github.com/dotnet/roslyn

上提交功能请求