Projects can easily move between developer computers, source control repositories, build servers, etc., it's highly impractical to keep the binary assemblies of NuGet packages directly bound to a project.
- It would make each copy of the project unnecessarily bloated.
- It would also make it very difficult to update package binaries to newer versions as updates would have to be applied across all copies of the project.
NuGet maintains a simple reference list of the packages upon which a project depends, including both top-level and down-level dependencies.
- when you install a package from some host into a project, NuGet records the package identifier and version number in the reference list.
- NuGet then provides a means to restore all referenced packages upon request.