A feature I wasn’t aware of that it existed for NuGet is the concept of a lock file. This allows to lock the project dependency graph guaranteeing that the same packages are restored every time. I was thinking that NuGet guarantees this by default but there are some situations where NuGet will not come up with the same dependency graph on every restore . Some examples: nuget.config mismatch : Different package sources can be used in different nuget.config files resulting in different packages to be used Intermediate versions : A missing version of the package, matching PackageReference version requirements, is published Package deletion : Though nuget.org does not allow package deletions, not all package repositories have this constraint. Deletion of a package version results in NuGet finding the best match when it cannot resolve to the deleted version. Floating versions : When you use floating versions like <PackageReference Include...