我们的产品包含约 15 个解决方案,每个解决方案都有多个项目。
问题很简单:哪个工具可以让我们在整个代码库中搜索死代码?
在单个解决方案中搜索很容易(关于那个解决方案的很多答案)。
但是,如何确定解决方案 AlphaSol 的项目 AlphaProj 中的“public void Foo()”,它在 AlphaSol 本身中没有使用,实际上是否在例如 BetaSol 中使用?
我们的产品包含约 15 个解决方案,每个解决方案都有多个项目。
问题很简单:哪个工具可以让我们在整个代码库中搜索死代码?
在单个解决方案中搜索很容易(关于那个解决方案的很多答案)。
但是,如何确定解决方案 AlphaSol 的项目 AlphaProj 中的“public void Foo()”,它在 AlphaSol 本身中没有使用,实际上是否在例如 BetaSol 中使用?
Although you have 15 solutions nothing stops you from creating another solution that will have all the projects referenced, let's say All.sln. So whenever you need to find external references you open this All.sln solution and look for the references.
We probably have about 100 solutions, and one All.sln that references all the projects from those solutions. It is easy to add all the projects from one solution to All.sln: you just select Add Existing Projects
and select one of those 15 solution files. You need adjust file type in Add Existing Projects
dialog to be able to select solution file. Also, to keep this big solution organized, you can use solution folders.
您可能还想检查NDepend。
由于另一个答案足以满足您的即时需求,而且我不想听起来像一个糟糕的商业广告,因此我将其留给感兴趣的读者以了解有关该工具的更多信息。
为了详细说明 Christian 的答案,NDepend工具确实可以帮助在 .NET 代码库中查找未使用的代码。免责声明:我是这个工具的开发者之一。
NDepend 建议在 LINQ 查询 (CQLinq) 上编写代码规则。提出了大约200 条默认代码规则,其中 3 条专用于未使用/死代码检测:
NDepend 集成在 Visual Studio 中,因此可以在 IDE 中检查/浏览/编辑这些规则。该工具还可以集成到您的 CI 流程中,它可以构建报告,显示违反规则和罪魁祸首代码元素。
如果你点击上面这3个链接查看这些规则的源代码,你会发现关于类型和方法的部分有点复杂。这是因为它们不仅检测未使用的类型和方法,还检测仅由未使用的死类型和方法(递归)使用的类型和方法。
这是静态分析,因此规则名称中的前缀可能是。如果仅通过反射使用代码元素,则这些规则可能会将其视为未使用,但事实并非如此。
除了使用这 3 条规则之外,我还建议通过测试来衡量代码覆盖率并争取完全覆盖。通常,您会看到测试无法覆盖的代码实际上是可以安全丢弃的未使用/死代码。这在不清楚代码分支是否可达的复杂算法中特别有用。