diff --git a/nuget/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.Project.cs b/nuget/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.Project.cs index 5dfa34eb784..a578baf3d6a 100644 --- a/nuget/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.Project.cs +++ b/nuget/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.Project.cs @@ -401,5 +401,50 @@ public async Task NoDependenciesReturnedIfNoTargetFrameworkCanBeResolved() Projects = [] }); } + + [Fact] + public async Task DiscoverReportsTransitivePackageVersionsWithFourPartsForMultipleTargetFrameworks() + { + await TestDiscoveryAsync( + workspacePath: "", + files: + [ + ("myproj.csproj", """ + + + netstandard2.0;net8.0 + + + + + + """) + ], + expectedResult: new() + { + FilePath = "", + Projects = [ + new() + { + FilePath = "myproj.csproj", + Dependencies = [ + new("Microsoft.NET.Sdk", null, DependencyType.MSBuildSdk), + new("AWSSDK.S3", "3.7.307.29", DependencyType.PackageReference, TargetFrameworks: ["net8.0", "netstandard2.0"], IsDirect: true), + new("AWSSDK.Core", "3.7.303.27", DependencyType.Unknown, TargetFrameworks: ["net8.0", "netstandard2.0"], IsTransitive: true), + new("Microsoft.Bcl.AsyncInterfaces", "1.1.0", DependencyType.Unknown, TargetFrameworks: ["netstandard2.0"], IsTransitive: true), + new("NETStandard.Library", "2.0.3", DependencyType.Unknown, TargetFrameworks: ["netstandard2.0"], IsTransitive: true), + new("System.Runtime.CompilerServices.Unsafe", "4.5.2", DependencyType.Unknown, TargetFrameworks: ["netstandard2.0"], IsTransitive: true), + new("System.Threading.Tasks.Extensions", "4.5.2", DependencyType.Unknown, TargetFrameworks: ["netstandard2.0"], IsTransitive: true), + ], + Properties = [ + new("TargetFrameworks", "netstandard2.0;net8.0", "myproj.csproj"), + ], + TargetFrameworks = ["net8.0", "netstandard2.0"], + ReferencedProjectPaths = [], + } + ], + } + ); + } } } diff --git a/nuget/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/SdkProjectDiscovery.cs b/nuget/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/SdkProjectDiscovery.cs index 07c8603d957..1f51d445430 100644 --- a/nuget/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/SdkProjectDiscovery.cs +++ b/nuget/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/SdkProjectDiscovery.cs @@ -114,7 +114,7 @@ private static async Task> GetTransitiveDependencies( transitiveDependencies[dependency.Name] = existingDependency with { // Revisit this logic. We may want to return each dependency instead of merging them. - Version = SemanticVersion.Parse(existingDependency.Version!) > SemanticVersion.Parse(dependency.Version!) + Version = NuGetVersion.Parse(existingDependency.Version!) > NuGetVersion.Parse(dependency.Version!) ? existingDependency.Version : dependency.Version, TargetFrameworks = existingDependency.TargetFrameworks is not null && dependency.TargetFrameworks is not null