home / skills / github / awesome-copilot / nuget-manager

nuget-manager skill

/skills/nuget-manager

This skill manages NuGet packages in .NET projects using the dotnet CLI, ensuring safe additions, removals, and version updates with restoration.

npx playbooks add skill github/awesome-copilot --skill nuget-manager

Review the files below or copy the command above to add this skill to your agents.

Files (1)
SKILL.md
3.3 KB
---
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.

## 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.
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 [<PROJECT>] package <PACKAGE_NAME> [--version <VERSION>]`.
Example: `dotnet add src/MyProject/MyProject.csproj package Newtonsoft.Json`

### Removing a Package
Use `dotnet remove [<PROJECT>] package <PACKAGE_NAME>`.
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. 
    Using `jq`:
    `dotnet package search <PACKAGE_NAME> --exact-match --format json | jq -e '.searchResult[].packages[] | select(.version == "<VERSION>")'`
    Using PowerShell:
    `(dotnet package search <PACKAGE_NAME> --exact-match --format json | ConvertFrom-Json).searchResult.packages | Where-Object { $_.version -eq "<VERSION>" }`
    
2.  **Determine Version Management**:
    - Search for `Directory.Packages.props` in the solution root. If present, versions should be managed there via `<PackageVersion Include="Package.Name" Version="1.2.3" />`.
    - If absent, check individual `.csproj` files for `<PackageReference Include="Package.Name" Version="1.2.3" />`.

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` (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`.

Overview

This skill manages NuGet packages in .NET projects and enforces safe, consistent package operations. It prioritizes using the dotnet CLI for adding and removing packages and provides a strict, verifiable workflow for editing versions directly. It helps prevent accidental project-file corruption and ensures package restores validate changes immediately.

How this skill works

The skill inspects solution layout to determine whether package versions are centralized in Directory.Packages.props or defined per-project in .csproj files. For add/remove actions it issues dotnet CLI commands (dotnet add/remove package). For version changes it verifies the target version exists on NuGet, applies a direct edit to the appropriate file, and runs dotnet restore to confirm compatibility.

When to use it

  • Adding a new NuGet package to a project or solution
  • Removing an existing NuGet package from a project
  • Updating a package version centrally or per-project
  • Verifying a package version exists before changing files
  • Ensuring changes restore cleanly after version edits

Best practices

  • Always use dotnet add package and dotnet remove package for adds/removals; do not edit project files directly for these operations
  • Limit direct file edits to version string updates only and never add/remove references manually
  • Verify version existence with dotnet package search (use jq or PowerShell to parse JSON) before editing
  • Determine whether versions are managed in Directory.Packages.props or in individual .csproj files before making changes
  • Run dotnet restore immediately after any version change and revert if restore fails

Example use cases

  • Add Serilog to src/WebApi/WebApi.csproj using dotnet add src/WebApi/WebApi.csproj package Serilog
  • Remove Newtonsoft.Json from a project with dotnet remove path/to/project.csproj package Newtonsoft.Json
  • Update Newtonsoft.Json to 13.0.3 by verifying the version exists, editing Directory.Packages.props (or .csproj), then running dotnet restore
  • Bulk-update a centrally managed dependency by editing Directory.Packages.props and validating solution restore
  • Confirm a target version with dotnet package search and script the check using jq or PowerShell

FAQ

Can I add or remove packages by editing .csproj files directly?

No. Use dotnet add package and dotnet remove package for adding or removing packages to preserve tooling metadata and project integrity.

When is direct file editing allowed?

Direct edits are allowed only to change the version string of an existing PackageReference or PackageVersion entry. After editing, immediately run dotnet restore to verify compatibility.