diff --git a/src/Directory.Build.props b/src/Directory.Build.props index 910e45f..75e60ad 100644 --- a/src/Directory.Build.props +++ b/src/Directory.Build.props @@ -1,7 +1,7 @@ - 4.1.5 + 4.1.6 preview NU1608 1.0.0 diff --git a/src/PackageUpdate/Updater.cs b/src/PackageUpdate/Updater.cs index 04b26fc..e961b0a 100644 --- a/src/PackageUpdate/Updater.cs +++ b/src/PackageUpdate/Updater.cs @@ -314,12 +314,8 @@ public static async Task Update( // Perform migration: update Include attribute and Version packageElement.SetAttributeValue("Include", alternatePackage.PackageId); - // Use the minimum version from the range if specified and greater than 0.0.0, - // otherwise use the latest version we found - var minVersion = alternatePackage.Range?.MinVersion; - var targetVersion = minVersion != null && minVersion > new NuGetVersion(0, 0, 0) - ? minVersion - : alternateMetadata.Identity.Version; + // Always use the latest version of the alternate package + var targetVersion = alternateMetadata.Identity.Version; packageElement.SetAttributeValue("Version", targetVersion.ToString()); Log.Information( diff --git a/src/Tests/UpdaterTests.cs b/src/Tests/UpdaterTests.cs index 21baf68..92ecf5d 100644 --- a/src/Tests/UpdaterTests.cs +++ b/src/Tests/UpdaterTests.cs @@ -1256,6 +1256,47 @@ public async Task NoMigrationDoesNotUpdateCsprojFiles() await Assert.That(csprojResult).IsEqualTo(originalCsproj); } + [Test] + public async Task MigrationUsesLatestVersionNotMinVersion() + { + using var cache = new SourceCacheContext { RefreshMemoryCache = true }; + var content = + """ + + + + + + """; + + using var tempFile = await TempFile.CreateText(content); + + await Updater.Update(cache, tempFile.Path, null); + + var result = await File.ReadAllTextAsync(tempFile.Path); + var doc = XDocument.Parse(result); + + var package = doc.Descendants("PackageVersion").Single(); + var id = package.Attribute("Include")?.Value; + var version = package.Attribute("Version")?.Value; + + // Should be migrated to the alternative package + await Assert.That(id).IsNotEqualTo("WindowsAzure.Storage"); + + // The migrated version should be the latest version of the alternate package, + // not the min version from the deprecation range + await Assert.That(NuGetVersion.TryParse(version, out var migratedVersion)).IsTrue(); + + var latestMetadata = await Updater.GetLatestVersion( + id!, + new NuGetVersion(0, 0, 0), + sources, + cache); + + await Assert.That(latestMetadata).IsNotNull(); + await Assert.That(migratedVersion!).IsEqualTo(latestMetadata!.Identity.Version); + } + [Test] public async Task ConcurrentRepositoryReaderAccessDoesNotThrow() {