NuGet is the package manager for .NET. A NuGet package is a zip archive with a .nupkg extension containing a nuspec manifest, compiled assemblies laid out by target framework, and optionally content files, MSBuild targets, native runtime assets and analyzers. The manifest declares the package's identity, its version, its dependencies — expressed as version ranges that vary per target framework — and the licence and metadata that consumers see.
On the consuming side, NuGet resolves that dependency graph at restore time. Modern projects declare dependencies with PackageReference in the project file rather than a separate packages.config, and restore walks the transitive graph, applies nearest-wins conflict resolution, and writes a project.assets.json describing exactly what the compiler and the runtime will see. Packages themselves are cached globally rather than copied per project, which is why a clean build on a fresh agent behaves differently from one on a developer machine.
On the producing side, NuGet is how .NET code moves between teams. Packages are built with dotnet pack or nuget.exe, inspected with the Package Explorer, and pushed to a feed — nuget.org for public libraries, or a private feed for internal code. Where the feed lives matters more than it looks: package sources are configured through a hierarchy of NuGet.config files, and getting that hierarchy wrong is behind a large share of "it restores on my machine" incidents.
Why this skill matters now
Almost every .NET codebase of consequence is now assembled rather than written. The application team owns perhaps a fifth of the assemblies it ships; the rest arrive through NuGet from nuget.org, from vendor feeds and from internal libraries. That makes dependency management a first-order engineering concern rather than a tooling detail.
Three pressures have sharpened this. Supply-chain scrutiny means organisations now have to know what is inside their packages and where each one came from, which pushes teams onto private feeds and proxies they control. Reproducibility requirements mean floating versions and unlocked restores are no longer acceptable in regulated pipelines. And the migration from packages.config to PackageReference, and from nuget.exe to the dotnet CLI, has left many organisations with build systems that half-work in two idioms at once.
The hiring demand follows that. Consuming packages is a five-minute skill. Designing an internal package strategy — feed topology, versioning, central package management, restore determinism, publication and deprecation — is what teams actually need and rarely have.