visual studio-.NET在多个解决方案中发现死代码



我们的产品有大约15个解决方案,每个解决方案都有多个项目。

问题很简单:哪种工具可以让我们在整个代码库中搜索死代码?

在一个解决方案中搜索是很容易的(SO上有很多答案)。

但是,如何确定解决方案AlphaSol的项目AlphaProj中的"public void Foo()"(未在AlphaSol内部使用)是否真的在例如BetaSol中使用?

尽管您有15个解决方案,但没有什么能阻止您创建另一个引用所有项目的解决方案,比如all.sln。因此,每当您需要查找外部引用时,您都可以打开这个all.sln解决方案并查找引用。

我们可能有大约100个解决方案,还有一个All.sln引用了这些解决方案中的所有项目。将一个解决方案中的所有项目添加到all.sln很容易:只需选择Add Existing Projects并从这15个解决方案文件中选择一个即可。您需要在Add Existing Projects对话框中调整文件类型才能选择解决方案文件。此外,为了保持这个大型解决方案的有序性,您可以使用解决方案文件夹。

您可能还想签出NDepend。

由于另一个答案足够安静,可以满足您的即时需求,而且我不想听起来像一个糟糕的广告,所以我把它留给感兴趣的读者来了解更多关于该工具的信息。

要详细说明Christian的答案,工具NDepend确实可以帮助在.NET代码库中查找未使用的代码免责声明:我是这个工具的开发者之一

NDepend提出编写基于LINQ查询的代码规则(CQLinq)。提出了大约200个默认代码规则,其中3个专门用于未使用/死代码检测:

  • 潜在的死类型(因此检测未使用的类、结构、接口、委托…)
  • 潜在死方法(因此检测未使用的方法、ctor、属性getter/setter…)
  • 潜在死区

NDepend集成在Visual Studio中,因此可以在IDE中检查/浏览/编辑这些规则。该工具还可以集成到CI流程中,它可以生成报告,显示违反的规则和罪魁祸首代码元素。

如果你点击上面的3个链接来获取这些规则的源代码,你会发现关于类型和方法的链接有点复杂。这是因为它们不仅检测未使用的类型和方法,而且还检测未使用死类型和方法(递归)仅使用类型和方法。

这是静态分析,因此规则名称中的前缀可能。如果通过反射仅使用代码元素,则这些规则可能会将其视为未使用,但事实并非如此。

除了使用这3条规则之外,我还建议通过测试来衡量代码覆盖率,并努力实现完全覆盖。通常,您会看到测试无法覆盖的代码实际上是可以安全丢弃的未使用/已死亡的代码。这在复杂的算法中尤其有用,因为在复杂算法中,不清楚代码分支是否可访问。

相关内容

  • 没有找到相关文章

最新更新