Fix it fast
Most likely: A direct or central package version pins a lower version than another dependency path requires, so NuGet resolved a downgrade.
1. Confirm this is your error
error NU1605: Detected package downgrade: Example.Package from 2.0.0 to 1.5.0. Reference the package directly from the project to select a different version. 2. Check the cause
dotnet restore -v normal
dotnet list package --include-transitive
grep -R "<PackageReference\|<PackageVersion" -n *.csproj Directory.Packages.props 3. Apply the safe fix
# Select the higher version shown in the NU1605 message.
dotnet add package <package-id> --version <higher-version>
# If using Central Package Management, update the PackageVersion in Directory.Packages.props instead.
dotnet restore
dotnet build 4. Verify it works
dotnet restore
dotnet list package --include-transitive
dotnet build Don't use unsafe shortcuts
- Do not suppress NU1605 before checking whether the lower version can break runtime behavior.
- Do not upgrade only one package from a tightly coupled package family if the conflict comes from version skew.
- Do not rely on an old lock file after changing package versions, restore again and inspect the resolved version.
What Broke in the Dependency Graph
This is NuGet refusing to continue with a dependency graph that does not make sense. The important detail is which versions or peer requirements disagree, not just the final error code.
Repair the dependency graph
Add or update an explicit PackageReference or PackageVersion to the intended higher version.
Upgrade parent packages so they converge on compatible transitive versions.
Re-run:dotnet restore && dotnet build
Why Resolution Broke
Usually this comes down to a direct reference pins an older version than a transitive requirement, CPM pins a version below another package’s requested minimum, or partial upgrades cause skew across package families.
Prove the Graph Is Clean Again
Restore and build complete without NU1605.
project.assets.json shows the expected resolved version.
Validation
Re-run the failing command and confirm the original code/message is gone, and confirm expected artifacts or outputs exist (packages restored, build/publish succeeds).
Mechanism
NuGet computes a single resolved version per package. If the resolved version is lower than a requested version elsewhere in the graph, it emits NU1605.
Keep the Dependency Graph Healthy
To prevent this, manage versions centrally with CPM and update regularly, and run restore and build for all TFMs in CI to catch skew early.
Docs and source code
NU1605 downgrade message
Message template and suggested fix via explicit reference. - GitHub
<data name="Log_DowngradeWarning" xml:space="preserve">
<value>Detected package downgrade: {0} from {1} to {2}. Reference the package directly from the project to select a different version.</value>
<comment>{0}: package id
{1}: requested version
{2}: resolved version</comment>
</data>