When creating an assembly, NuGet uses the packages section in the packages file to determine which NuGet packages are loaded.
When installing a package, NuGet uses the dependencies section in the .nuspec files to determine which additional NuGet packages to install. Of course, these additional NuGet packages may require their own additional NuGet packages.
When creating a .nuspec file, you usually include one dependency entry for each package entry that you find in packages.config (skip package entries with the developmentDependency="true" attribute). But, if you want, you can also skip any package entries that your assembly does not directly link to - packages with an indirect link should be covered by dependency entries in the packages that your project links directly. In practice, I found it only safer to include all packages with direct and indirect links due to errors in the dependency lists of reference packages.
source share