From f515e3c872537ff19de276a22a763fc57c410064 Mon Sep 17 00:00:00 2001 From: Pavel Simsa Date: Tue, 6 Jan 2026 14:09:54 +0100 Subject: [PATCH 1/6] Add NuGet Manager skill documentation This skill outlines the management of NuGet packages in .NET projects, emphasizing the use of the `dotnet` CLI for package operations and detailing workflows for adding, removing, and updating package versions. --- docs/README.skills.md | 1 + skills/nuget-manager/SKILL.md | 59 +++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) create mode 100644 skills/nuget-manager/SKILL.md diff --git a/docs/README.skills.md b/docs/README.skills.md index 8c2876521..433a2ed63 100644 --- a/docs/README.skills.md +++ b/docs/README.skills.md @@ -22,4 +22,5 @@ Skills differ from other primitives by supporting bundled assets (scripts, code | Name | Description | Bundled Assets | | ---- | ----------- | -------------- | +| [nuget-manager](../skills/nuget-manager/SKILL.md) | Manage NuGet packages in .NET projects/solutions. Use this skill when adding, removing, or updating NuGet package versions. It enforces using `dotnet` CLI for package management and provides strict procedures for direct file edits only when updating versions. | None | | [webapp-testing](../skills/webapp-testing/SKILL.md) | Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs. | `test-helper.js` | diff --git a/skills/nuget-manager/SKILL.md b/skills/nuget-manager/SKILL.md new file mode 100644 index 000000000..bed7bc934 --- /dev/null +++ b/skills/nuget-manager/SKILL.md @@ -0,0 +1,59 @@ +--- +name: nuget-manager +description: Manage NuGet packages in .NET projects/solutions. Use this skill when adding, removing, or updating NuGet package versions. It enforces using `dotnet` CLI for package management and provides strict procedures for direct file edits only when updating versions. +--- + +# Nuget Manager + +## Overview + +This skill ensures consistent and safe management of NuGet packages across .NET projects. It prioritizes using the `dotnet` CLI to maintain project integrity and enforces a strict verification and restoration workflow for version updates. + +## Core Rules + +1. **NEVER** directly edit `.csproj`, `.props`, or `Directory.Packages.props` files to **add** or **remove** packages. Always use `dotnet add package` and `dotnet remove package` commands. +2. **DIRECT EDITING** is ONLY permitted for **changing versions** of existing packages. +3. **VERSION UPDATES** must follow the mandatory workflow: + - Verify the target version exists on NuGet. + - Determine if versions are managed per-project (`.csproj`) or centrally (`Directory.Packages.props`). + - Update the version string in the appropriate file. + - Immediately run `dotnet restore` to verify compatibility. + +## Workflows + +### Adding a Package +Use `dotnet add [] package [--version ]`. +Example: `dotnet add src/MyProject/MyProject.csproj package Newtonsoft.Json` + +### Removing a Package +Use `dotnet remove [] package `. +Example: `dotnet remove src/MyProject/MyProject.csproj package Newtonsoft.Json` + +### Updating Package Versions +When updating a version, follow these steps: + +1. **Verify Version Existence**: + Check if the version exists using the `dotnet package search` command with exact match and JSON formatting: + `dotnet package search --exact-match --format json | jq -e '.searchResult[].packages[] | select(.version == "")' > /dev/null` + +2. **Determine Version Management**: + - Search for `Directory.Packages.props` in the solution root. If present, versions should be managed there via ``. + - If absent, check individual `.csproj` files for ``. + +3. **Apply Changes**: + Modify the identified file with the new version string. + +4. **Verify Stability**: + Run `dotnet restore` on the project or solution. If errors occur, revert the change and investigate. + +## Examples + +### User: "Add Serilog to the WebApi project" +**Action**: Execute `dotnet add src/WebApi/WebApi.csproj package Serilog`. + +### User: "Update Newtonsoft.Json to 13.0.3 in the whole solution" +**Action**: +1. Verify 13.0.3 exists: `dotnet package search Newtonsoft.Json --exact-match --format json | jq -e '.searchResult[].packages[] | select(.version == "13.0.3")'` +2. Find where it's defined (e.g., `Directory.Packages.props`). +3. Edit the file to update the version. +4. Run `dotnet restore`. From 920f66277130656d5e20443bb3c02977e1a02dc1 Mon Sep 17 00:00:00 2001 From: Pavel Simsa Date: Tue, 6 Jan 2026 14:21:41 +0100 Subject: [PATCH 2/6] Update version check command in SKILL.md Removed output redirection from the version existence check command. --- skills/nuget-manager/SKILL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skills/nuget-manager/SKILL.md b/skills/nuget-manager/SKILL.md index bed7bc934..b72d1bd7d 100644 --- a/skills/nuget-manager/SKILL.md +++ b/skills/nuget-manager/SKILL.md @@ -34,7 +34,7 @@ When updating a version, follow these steps: 1. **Verify Version Existence**: Check if the version exists using the `dotnet package search` command with exact match and JSON formatting: - `dotnet package search --exact-match --format json | jq -e '.searchResult[].packages[] | select(.version == "")' > /dev/null` + `dotnet package search --exact-match --format json | jq -e '.searchResult[].packages[] | select(.version == "")'` 2. **Determine Version Management**: - Search for `Directory.Packages.props` in the solution root. If present, versions should be managed there via ``. From 24f33dd9b68b6c5846bce07245f877afd37b310e Mon Sep 17 00:00:00 2001 From: Pavel Simsa Date: Tue, 6 Jan 2026 15:35:31 +0100 Subject: [PATCH 3/6] Update skills/nuget-manager/SKILL.md Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- skills/nuget-manager/SKILL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skills/nuget-manager/SKILL.md b/skills/nuget-manager/SKILL.md index b72d1bd7d..d74b45075 100644 --- a/skills/nuget-manager/SKILL.md +++ b/skills/nuget-manager/SKILL.md @@ -3,7 +3,7 @@ name: nuget-manager description: Manage NuGet packages in .NET projects/solutions. Use this skill when adding, removing, or updating NuGet package versions. It enforces using `dotnet` CLI for package management and provides strict procedures for direct file edits only when updating versions. --- -# Nuget Manager +# NuGet Manager ## Overview From 8d0adc69633e081b3043b7226eea86f291fdf067 Mon Sep 17 00:00:00 2001 From: Pavel Simsa Date: Tue, 6 Jan 2026 15:36:48 +0100 Subject: [PATCH 4/6] Fix formatting of description in SKILL.md --- skills/nuget-manager/SKILL.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/skills/nuget-manager/SKILL.md b/skills/nuget-manager/SKILL.md index d74b45075..165a372e1 100644 --- a/skills/nuget-manager/SKILL.md +++ b/skills/nuget-manager/SKILL.md @@ -1,6 +1,6 @@ --- name: nuget-manager -description: Manage NuGet packages in .NET projects/solutions. Use this skill when adding, removing, or updating NuGet package versions. It enforces using `dotnet` CLI for package management and provides strict procedures for direct file edits only when updating versions. +description: 'Manage NuGet packages in .NET projects/solutions. Use this skill when adding, removing, or updating NuGet package versions. It enforces using `dotnet` CLI for package management and provides strict procedures for direct file edits only when updating versions.' --- # NuGet Manager From 6e801aa978bef7a0a3c79884987e80eb31baded0 Mon Sep 17 00:00:00 2001 From: Pavel Simsa Date: Tue, 6 Jan 2026 21:34:03 +0100 Subject: [PATCH 5/6] Address PR feedback --- skills/nuget-manager/SKILL.md | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/skills/nuget-manager/SKILL.md b/skills/nuget-manager/SKILL.md index 165a372e1..3de5ce401 100644 --- a/skills/nuget-manager/SKILL.md +++ b/skills/nuget-manager/SKILL.md @@ -9,6 +9,12 @@ description: 'Manage NuGet packages in .NET projects/solutions. Use this skill w This skill ensures consistent and safe management of NuGet packages across .NET projects. It prioritizes using the `dotnet` CLI to maintain project integrity and enforces a strict verification and restoration workflow for version updates. +## Prerequisites + +- .NET SDK installed (typically .NET 8.0 SDK or later, or a version compatible with the target solution). +- `dotnet` CLI available on your `PATH`. +- `jq` (JSON processor) OR PowerShell (for version verification using `dotnet package search`). + ## Core Rules 1. **NEVER** directly edit `.csproj`, `.props`, or `Directory.Packages.props` files to **add** or **remove** packages. Always use `dotnet add package` and `dotnet remove package` commands. @@ -33,8 +39,11 @@ Example: `dotnet remove src/MyProject/MyProject.csproj package Newtonsoft.Json` When updating a version, follow these steps: 1. **Verify Version Existence**: - Check if the version exists using the `dotnet package search` command with exact match and JSON formatting: + Check if the version exists using the `dotnet package search` command with exact match and JSON formatting. + Using `jq`: `dotnet package search --exact-match --format json | jq -e '.searchResult[].packages[] | select(.version == "")'` + Using PowerShell: + `(dotnet package search --exact-match --format json | ConvertFrom-Json).searchResult.packages | Where-Object { $_.version -eq "" }` 2. **Determine Version Management**: - Search for `Directory.Packages.props` in the solution root. If present, versions should be managed there via ``. @@ -53,7 +62,7 @@ When updating a version, follow these steps: ### User: "Update Newtonsoft.Json to 13.0.3 in the whole solution" **Action**: -1. Verify 13.0.3 exists: `dotnet package search Newtonsoft.Json --exact-match --format json | jq -e '.searchResult[].packages[] | select(.version == "13.0.3")'` +1. Verify 13.0.3 exists: `dotnet package search Newtonsoft.Json --exact-match --format json` (and parse output to confirm "13.0.3" is present). 2. Find where it's defined (e.g., `Directory.Packages.props`). 3. Edit the file to update the version. 4. Run `dotnet restore`. From 81715e67ae11a6a901b0dd87a02ca83767775526 Mon Sep 17 00:00:00 2001 From: Pavel Simsa Date: Wed, 7 Jan 2026 09:40:52 +0100 Subject: [PATCH 6/6] Update readme.skills --- docs/README.skills.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/README.skills.md b/docs/README.skills.md index 7f530aa9a..0268371c1 100644 --- a/docs/README.skills.md +++ b/docs/README.skills.md @@ -22,6 +22,6 @@ Skills differ from other primitives by supporting bundled assets (scripts, code | Name | Description | Bundled Assets | | ---- | ----------- | -------------- | -| [nuget-manager](../skills/nuget-manager/SKILL.md) | Manage NuGet packages in .NET projects/solutions. Use this skill when adding, removing, or updating NuGet package versions. It enforces using `dotnet` CLI for package management and provides strict procedures for direct file edits only when updating versions. | None | | [azure-role-selector](../skills/azure-role-selector/SKILL.md) | When user is asking for guidance for which role to assign to an identity given desired permissions, this agent helps them understand the role that will meet the requirements with least privilege access and how to apply that role. | `LICENSE.txt` | +| [nuget-manager](../skills/nuget-manager/SKILL.md) | Manage NuGet packages in .NET projects/solutions. Use this skill when adding, removing, or updating NuGet package versions. It enforces using `dotnet` CLI for package management and provides strict procedures for direct file edits only when updating versions. | None | | [webapp-testing](../skills/webapp-testing/SKILL.md) | Toolkit for interacting with and testing local web applications using Playwright. Supports verifying frontend functionality, debugging UI behavior, capturing browser screenshots, and viewing browser logs. | `test-helper.js` |