diff --git a/src/code/UpdatePSResource.cs b/src/code/UpdatePSResource.cs index fcb0dfe3e..86b66dc71 100644 --- a/src/code/UpdatePSResource.cs +++ b/src/code/UpdatePSResource.cs @@ -354,14 +354,22 @@ private string[] ProcessPackageNames( continue; } - if ((versionRange == VersionRange.All && repositoryPackage.Version > installedPackage.Version) || + if (!NuGetVersion.TryParse(repositoryPackage.Version.ToString(), out NuGetVersion repositoryPackageNuGetVersion)) + { + WriteWarning($"Cannot parse nuget version in repository package '{repositoryPackage.Name}'. Cannot update package."); + continue; + } + + // We compare NuGetVersions instead of System.Version as repositoryPackage.Version (3.0.17.0) and installedPackage.Version (3.0.17.-1) + // should refer to the same version but with System.Version end up having discrepancies which yields incorrect results. + if ((versionRange == VersionRange.All && repositoryPackageNuGetVersion > installedVersion) || !versionRange.Satisfies(installedVersion)) { namesToUpdate.Add(repositoryPackage.Name); } else { - WriteVerbose($"Installed package {repositoryPackage.Name} is up to date."); + WriteVerbose($"Installed package {repositoryPackage.Name} {repositoryPackageNuGetVersion} is already up to date."); } }