package-management
NuGet package management best practices including versioning strategies, central package management, and dependency resolution. Use when setting up Central Package Management (CPM), managing package versions across multiple projects, or resolving dependency conflicts in .NET solutions.
By wshaddix · 511 installs
npx skills add wshaddix/dotnet-skills --skill package-management
Source repository · Upstream listing
NuGet Package Management
When to Use This Skill
Use this skill when:
Adding, removing, or updating NuGet packages
Setting up Central Package Management (CPM) for a solution
Managing package versions across multiple projects
Troubleshooting package conflicts or restore issues
Golden Rule: Never Edit XML Directly
Always use dotnet CLI commands to manage packages. Never manually edit .csproj or Directory.Packages.props files.
Why:
CLI validates package exists and resolves correct version
Handles transitive dependencies correctly
Updates lock files if present
Avoids typos and malformed XML
Works correctly with CPM
Central Package Management (CPM)
CPM centralizes all package versions in one file, eliminating version conflicts across projects.
Enable CPM
Create Directory.Packages.props in solution root:
Project Files with CPM
Projects reference packages without versions :
Adding Packages with CPM
Shared Version Variables
Group related packages with shared version variables:
Benefits:
Update all Akka packages by changing one variable
Clear organization with labeled ItemGroups
Prevents version mismatches in related packages
When NOT to Use CPM
Central Package Management isn't always the right choice:
Legacy Projects
Migrating an existing large solution to CPM can introduce issues:
Existing version conflicts become visible all at once
Some packages may have intentional version differences
Migration requires touching many files simultaneously
Recommendation : For legacy projects, migrate incrementally or stick with per project versioning if it's working.
Version Ranges
CPM requires exact versions it doesn't support version ranges:
If you need version ranges (rare, but some library scenarios require it), CPM won't work.
Older .NET Versions
CPM requires:
.NET SDK 6.0.300+ or later
NuGet 6.2+ or later
Visual Studio 2022 17.2+ or later
If you're targeting older SDK versions or have team members on older tooling, CPM may cause build failures.
Multi Repo Solutions
If your solution spans multiple repositories that are built independently, CPM's single Directory.Packages.props won't help each repo needs its own.
CLI Command Reference
Adding Packages
Removing Packages
Listing Packages
Updating Packages
Restore and Clean
Package Sources
List Sources
Add Private Feed
NuGet.config
For solution specific sources, create NuGet.config :
Common Patterns
Development Only Packages
Conditional Packages
Version Override (Escape Hatch)
When you must override CPM for one project (rare):
Warning : This is detected by Slopwatch (see dotnet/slopwatch skill) as potential slop.
Troubleshooting
Version Conflicts
Restore Failures
Lock Files
For reproducible builds, use package lock files:
Then commit packages.lock.json files.
Anti Patterns
Don't: Edit XML Directly
Don't: Inline Versions with CPM
Don't: Mix Version Management
Don't: Forget Shared Variables
Quick Reference
Task Command
Add package dotnet add package <name
Add specific version dotnet add package <name version <ver
Remove package dotnet remove package <name
List packages dotnet list package
Show outdated dotnet list package outdated
Show vulnerable dotnet list package vulnerable
Restore dotnet restore
Clear cache dotnet nuget locals all clear
Resources
Central Package Management : https://learn.microsoft.com/en us/nuget/consume packages/central package management
dotnet CLI Reference : https://learn.microsoft.com/en us/dotnet/core/tools/
NuGet.config Reference : https://learn.microsoft.com/en us/nuget/reference/nuget config file