2017-04-16 81 views
2

所以我需要的是一些为什么写一个解决方案分析的Visual Studio,可以:写作解决方案的分析仪适用于Visual Studio

  • 检测移动类和移动方法重构。
  • 在Visual Studio中显示建议的重构。
  • 应用重构。

我有一个控制台应用程序,可以做到这一点(使用Roslyn编译器),但我想集成Visual Studio中的逻辑。从我读过的内容来看,目前的代码修复/重构/分析器仅支持重构的文档级别,但对于我来说,没有足够的信息来推荐提到的重构之一。我需要关于整个解决方案的信息。

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

回答

2

答案很简单:没有合理的方式与罗斯林API来做到这一点

龙答:

,因为它是目前实现的API只允许分析器知道的事情当前编译(Visual Studio中的项目)。如果您从分析仪中的Initalize方法中调用RegisterCompilationAction,您将能够查看编译中的所有符号。

为什么分析仪不能看到整个解决方案的范围?最简单的答案是:因为编译器不能,分析器在编译器内运行。这样做是为了使分析器可以在不安装Visual Studio的情况下在连续集成服务器上运行。 MSBuild读取解决方案文件,然后为每个项目调用一次编译器。编译器从来不知道项目依赖关系,编译器团队不想参与该项业务,他们很乐意将其留给MSBuild。

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

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

+0

上提出功能请求谢谢你的答案!那么,这对我来说是不幸的。然后,我会尝试为Visual Studio编写扩展。你能推荐关于这个话题的任何文章/文献吗? –

+0

有用于写入VS扩展的[extend-vs](https://github.com/Microsoft/VSSDK-Extensibility-Samples)示例。我会看Josh Varty的[博客文章](https://joshvarty.wordpress.com/2014/09/12/learn-roslyn-now-part-6-working-with-workspaces/)和[videos](https ://www.youtube.com/watch?v = 35BFJt91rxY&list = PLxk7xaZWBdUT23QfaQTCJDG6Q1xx6uHdG&index = 7)关于如何获取[VisualStudioWorkspace](http://source.roslyn.io/#Microsoft.VisualStudio。LanguageServices/Implementation/ProjectSystem/VisualStudioWorkspace.cs) –

+0

非常感谢! –