C# 为VisualStudio编写解决方案分析器

C# 为VisualStudio编写解决方案分析器,c#,.net,visual-studio,roslyn,C#,.net,Visual Studio,Roslyn,因此,我需要了解为什么要为Visual Studio编写解决方案分析器,它可以: 检测移动类和移动方法重构 在Visual Studio中显示建议的重构 应用重构 我有一个控制台应用程序可以做到这一点(使用Roslyn编译器),但我想在VisualStudio中集成逻辑。从我所读到的内容来看,当前的代码修复/重构/分析器只支持文档级的重构,但对我来说,这还不足以推荐上述重构之一。我需要关于整个解决方案的信息 所以我的问题是什么是最好的方法?你能推荐一个起点吗?一些与该主题相关的文章?任何建议

因此,我需要了解为什么要为Visual Studio编写解决方案分析器,它可以:

  • 检测移动类和移动方法重构
  • 在Visual Studio中显示建议的重构
  • 应用重构
我有一个控制台应用程序可以做到这一点(使用Roslyn编译器),但我想在VisualStudio中集成逻辑。从我所读到的内容来看,当前的代码修复/重构/分析器只支持文档级的重构,但对我来说,这还不足以推荐上述重构之一。我需要关于整个解决方案的信息


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

简短回答:使用Roslyn API没有合理的方法可以做到这一点

长答案:

当前实现的api只允许分析器了解当前编译(VisualStudio中的一个项目)中的内容。如果从分析器中的
Initalize
方法中调用
RegisterCompilationAction
,则可以查看编译中的所有符号

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

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


已经有足够多的人要求提供这一功能,我们认为这是我们最终需要做的事情。除非您愿意编写一个VisualStudio扩展来导入VisualStudio工作区并尝试运行自己的分析引擎,否则目前没有合理的方法来完成它。请在

上提交功能请求,谢谢您的回答!那对我来说很不幸。我将尝试为VisualStudio编写一个扩展。你能推荐一些关于这个主题的文章/文献吗?这里有一些写VS扩展的例子。我会看看Josh Varty的,关于如何获得外观,这可能是一个更新的示例(它说代码修复可以应用于整个解决方案):