用途:把当前 .NET 解决方案转换为使用中央包管理(CPM),将包版本集中到解决方案旁的 Directory.Packages.props 文件,并移除各 .csproj 中的版本号。
主要能力:在当前目录查找 *.sln(找不到则警告并停止);用 dotnet package list --include-transitive --format json 列出全部包(含传递依赖),解析出唯一包、版本及直接/传递属性;同一包多版本时取最高版本;检查是否已存在 CPM 文件,若 Directory.Packages.props 已存在则询问覆盖还是合并,并记录已有 Directory.Build.props 内容。
使用方式:在 .sln 同级创建 Directory.Packages.props,为每个唯一包写入 <PackageVersion Include="PackageName" Version="X.Y.Z" />;创建或更新 Directory.Build.props,加入 <ManagePackageVersionsCentrally>true</ManagePackageVersionsCentrally>;更新所有 .csproj,移除 <PackageReference> 的 Version 属性(如 <PackageReference Include="Newtonsoft.Json" />);运行 dotnet build 验证,失败时询问自动修复或手动处理;最后报告创建/修改的文件、集中包数量与构建状态。
适用场景:需要统一多项目 NuGet 版本、减少版本冲突的 .NET 解决方案。
限制:默认只集中直接包,传递包仅单独报告,除非用户明确要固定某传递包版本或需安全更新;无 .sln 时无法进行解决方案级 CPM;版本冲突自动取最高版本,不提示用户。