相关 Skills
管理 .NET 项目/解决方案中的 NuGet 包。在添加、删除或更新 NuGet 包版本时使用此技能。它强制使用 `dotnet` CLI 进行包管理,并仅在更新版本时提供直接编辑文件的严格流程。
NuGet 管理器
概述
此技能确保跨 .NET 项目的 NuGet 包管理的一致性和安全性。它优先使用 dotnet CLI 来维护项目完整性,并强制实施严格的验证和恢复工作流以进行版本更新。
先决条件
- 已安装 .NET SDK(通常为 .NET 8.0 SDK 或更高版本,或与目标解决方案兼容的版本)。
dotnetCLI 可在PATH中使用。jq(JSON 处理器)或 PowerShell(用于使用dotnet package search进行版本验证)。
核心规则
- 绝不直接编辑
.csproj、.props或Directory.Packages.props文件来添加或删除包。始终使用dotnet add package和dotnet remove package命令。 - 直接编辑仅允许用于更改现有包的版本。
- 版本更新必须遵循强制工作流:
- 验证目标版本在 NuGet 上存在。
- 确定版本是按项目(
.csproj)管理还是集中管理(Directory.Packages.props)。 - 在相应文件中更新版本字符串。
- 立即运行
dotnet restore以验证兼容性。
工作流
添加包
使用 dotnet add [<PROJECT>] package <PACKAGE_NAME> [--version <VERSION>]。
示例:dotnet add src/MyProject/MyProject.csproj package Newtonsoft.Json
删除包
使用 dotnet remove [<PROJECT>] package <PACKAGE_NAME>。
示例:dotnet remove src/MyProject/MyProject.csproj package Newtonsoft.Json
更新包版本
更新版本时,请遵循以下步骤:
-
验证版本存在:
使用dotnet package search命令进行精确匹配并以 JSON 格式输出,检查版本是否存在。
使用jq:
dotnet package search <PACKAGE_NAME> --exact-match --format json | jq -e '.searchResult[].packages[] | select(.version == "<VERSION>")'
使用 PowerShell:
(dotnet package search <PACKAGE_NAME> --exact-match --format json | ConvertFrom-Json).searchResult.packages | Where-Object { $_.version -eq "<VERSION>" } -
确定版本管理方式:
- 在解决方案根目录中搜索
Directory.Packages.props。如果存在,版本应通过<PackageVersion Include="Package.Name" Version="1.2.3" />在此处管理。 - 如果不存在,检查各个
.csproj文件中的<PackageReference Include="Package.Name" Version="1.2.3" />。
- 在解决方案根目录中搜索
-
应用更改:
使用新版本字符串修改已识别的文件。 -
验证稳定性:
对项目或解决方案运行dotnet restore。如果出现错误,则还原更改并进行调查。
示例
用户:“将 Serilog 添加到 WebApi 项目”
操作:执行 dotnet add src/WebApi/WebApi.csproj package Serilog。
用户:“将整个解决方案中的 Newtonsoft.Json 更新到 13.0.3”
操作:
- 验证 13.0.3 存在:
dotnet package search Newtonsoft.Json --exact-match --format json(并解析输出以确认存在 "13.0.3")。 - 找到定义位置(例如
Directory.Packages.props)。 - 编辑文件以更新版本。
- 运行
dotnet restore。






