所以我需要的是为什么要为 Visual Studio 编写一个解决方案分析器,它可以:
- 检测移动类和移动方法重构。
- 在 Visual Studio 中显示建议的重构。
- 应用重构。
我有一个控制台应用程序可以执行此操作(使用 Roslyn 编译器),但我想将逻辑集成到 Visual Studio 中。根据我的阅读,当前的代码修复/重构/分析器仅支持文档级别的重构,但对我来说,没有足够的信息来推荐上述重构之一。我需要有关整个解决方案的信息。
所以我的问题是最好的方法是什么?你能推荐一个起点吗?一些与该主题相关的文章?任何建议都会对我有很大帮助。
简短回答:使用 Roslyn API 没有合理的方法来做到这一点
长答案:
当前实现的 api 只允许分析器了解当前编译(Visual Studio 中的项目)中的内容。如果你打电话RegisterCompilationAction
从内部Initalize
方法,您将能够查看编译中的所有符号。
为什么分析人员无法看到整个解决方案的范围?最简单的答案是:因为编译器不能,而分析器在编译器内部运行。这样做是为了使分析器可以在不安装 Visual Studio 的持续集成服务器上运行。 MSBuild 读取解决方案文件,然后为每个项目调用一次编译器。编译器永远不会意识到项目依赖关系,编译器团队也不想从事这项业务,他们很乐意将其留给 MSBuild。
人们试图通过使用加载他们的解决方案来解决这个问题MSBuildWorkspace
并尝试以这种方式跨项目查看文档。这偶尔会失败,因为MSBuildWorkspace
不是线程安全的。它还会导致内存使用量飙升。人们尝试过缓存MSBuildWorkspace
实例可以部分解决此问题,但每次创建新编译时都需要使缓存失效(基本上是在除了最微不足道的更改之外的所有更改的情况下)。基本上,沿着这条路走下去充满了痛苦并且得不到支持。
足够多的人要求这个功能,我们认为这是我们最终需要做的事情。目前没有合理的方法来完成它,除非您愿意编写一个导入 Visual Studio 工作区并尝试运行其自己的分析引擎的 Visual Studio 扩展。请提交功能请求https://github.com/dotnet/roslyn https://github.com/dotnet/roslyn
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)