研发协作
维护 .NET 解决方案依赖健康时:排查过期 NuGet…
适用于对 .NET/NuGet 项目做依赖审计,优先发现漏洞、许可证陷阱和过期版本,并给出逐项升级动作。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 38/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 59/100 ×0.15
适用场景
维护 .NET 解决方案依赖健康时:排查特定
解决思路
- 通过 get_nuget_packages() 获取整个解决方案的依赖清单;或通过 get_nuget_packages(projectFilter: "Api") 只查单个项目。
- 读取返回的每项目结构 {Name, TargetFramework, Cpm, Packages: [{Id, Version}]},完成第一层 Inventory。
- 注意 Cpm: true:如果启用了中央包管理,更新应写入 Directory.Packages.props,而不是 csproj。
- 在盘点时标出跨项目混合的 TFM。
- 运行 dotnet list package --outdated 检查当前版本与最新稳定版之间的过期情况。
- 运行 dotnet list package --vulnerable --include-transitive 检查已知 CVE,并包含传递依赖。
- 上述两条 CLI 命令都需要先成功 restore;如果 restore 失败,先修复它再审计,否则损坏的锁状态会让版本输出不可靠。
- 进行许可证筛查:将依赖清单与已知商业许可证变更对照,完整理由见 knowledge/package-recommendations.md。
- 检查 MediatR:13+ 为商业许可(Lucky Penny, RPL);免费替代是 Mediator (martinothamar),基于 source-generated,MIT。
- 检查 MassTransit:9+ 为商业许可(v8 为 Apache,补丁支持到 2026 年底后 EOL);替代方案是 Wolverine 6.x,或短期留在 v8。
- 检查 FluentAssertions:8+ 为商业许可(v7 保持 Apache,冻结);替代方案是 xUnit built-in Assert(kit 默认)、Shouldly、AwesomeAssertions。
- 检查 AutoMapper:15+ 为商业许可(Lucky Penny);替代方案是手动映射(kit 默认)或 Mapperly (MIT)。
- 当项目处于免费主版本,而天真的“全部更新”会跨越商业边界时,触发许可证标记;这正是该步骤要防住的陷阱。
- 生成一张按优先级排序的表:漏洞优先,许可证陷阱其次,过期最后;每行给出推荐动作。
- 优先级 VULNERABLE:当前版本存在已知 CVE,动作为立即更新、测试、部署。
- 优先级 LICENSE:下一个主版本跨过商业边界,动作为固定在边界以下,或计划迁移。
- 优先级 MAJOR:落后一个主版本,可能有破坏性变更,动作为每次只升一个,先读 release notes。
- 优先级 MINOR/PATCH:例行漂移,动作为批量打补丁;minor 每次只升一个。
- 可选执行更新:通过 /migrate Flow C 执行报告建议的更新,一次一个包,每个包之间运行 dotnet build && dotnet test。
- 永远不要批量执行主版本更新:批量失败无法归因。
- 使用 get_nuget_packages 做清单、CPM 检测、TFM 审计。
- 使用 get_diagnostics 在更新后验证解决方案仍然能干净编译。
适用边界 · 注意事项
- 不适用于非 .NET/NuGet 解决方案,或不关心依赖漏洞、过期版本与许可证风险的场景。
- 如果 restore 失败,先修复再审计;此时不要依赖版本输出做判断。
- 缺少 get_nuget_packages MCP 工具、无法运行 dotnet CLI,或无法访问相关 knowledge 文件时不可用。