我需要了解一个庞大的遗留 .NET 代码库——于是我为它构建了一个工具

发布: (2026年4月23日 GMT+8 02:04)
4 分钟阅读
原文: Dev.to

Source: Dev.to

背景

我是一名 .NET 开发者,最近我逐步将自己平时为自己编写的一些小工具开源。其中一个工具是为了帮助理解一个大型的遗留 .NET 4.6 应用程序(约 15 年历史,超过 100 万行代码)而创建的。

问题

我需要一种方式来把握架构,而不仅仅是阅读代码:

  • 哪些依赖于哪些
  • 哪些地方走向错误的方向
  • 是否存在隐藏的循环依赖

虽然可以手动浏览代码,但要真正看清所有组件是如何相互连接的并不容易。现有的强大工具价格昂贵,而免费工具对我的需求来说又显得受限。

初步尝试

我曾考虑自行构建解决方案,做过一些实验,随后把它搁置。再次回顾这个想法时,我遇到了几个实际问题:

  • SDK 差异
  • MSBuild 解析问题
  • 项目无法正确加载
  • 缺失引用

最终我意识到自己在调试解决方案的加载过程,而不是调试代码本身。解决了加载步骤的稳定性后,剩下的就变成了有趣的部分。

解决方案概览

该工具执行以下步骤:

  1. 加载解决方案
  2. 映射依赖关系
  3. 在浏览器中以交互式图形展示
  4. 高亮循环依赖

额外分析

在深入挖掘的过程中,我加入了一些快速检查:

  • 圈复杂度
  • 死代码检测(未使用的公共成员)
  • 基本耦合度指标

一个简单的质量门可以让工具在 CI 中当阈值超标时失败。

实现细节

  • 目标框架: .NET 8
  • 核心库: Roslyn(MSBuild 工作区)、MSBuildLocator
  • Web 服务器: ASP.NET Core(嵌入式)
  • 可视化: D3.js

因为我本身是 .NET 开发者,所以将其打包为 .NET 全局工具。

dotnet tool install -g KiwiDepend
kiwi-dep analyze --solution MyApp.sln

使用方法

对解决方案运行 kiwi-dep analyze 会生成一个交互式 HTML 页面,展示依赖图、突出循环,并报告上述的额外度量指标。

结论

在没有清晰概览的情况下浏览如此规模的代码库非常痛苦。该工具提供了一种轻量、可扩展的方式来获取概览,并提前捕获架构问题。

如果你觉得它有用或想尝试一下,仓库地址在这里:

https://github.com/KiwiDevelopment/KiwiDepend

给仓库点一个 ⭐ 总是受欢迎的! 🙂

0 浏览
Back to Blog

相关文章

阅读更多 »