diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/ResolvePackageDependencies.cs b/src/Tasks/Microsoft.NET.Build.Tasks/ResolvePackageDependencies.cs index 7785c24105db..d06b619c03ca 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/ResolvePackageDependencies.cs +++ b/src/Tasks/Microsoft.NET.Build.Tasks/ResolvePackageDependencies.cs @@ -279,8 +279,26 @@ private void RaiseLockFileTargets() private void GetPackageAndFileDependencies(LockFileTarget target) { - var resolvedPackageVersions = target.Libraries - .ToDictionary(pkg => pkg.Name, pkg => pkg.Version.ToNormalizedString(), StringComparer.OrdinalIgnoreCase); + // In case of there are duplicated packages in libraries with differing versions, + // We skip package altogether + var resolvedPackageVersions = new Dictionary(StringComparer.OrdinalIgnoreCase); + var duplicatedPackages = new HashSet(StringComparer.OrdinalIgnoreCase); + foreach (LockFileTargetLibrary library in target.Libraries) + { + string libraryName = library.Name; + if (duplicatedPackages.Contains(libraryName)) + { + continue; + } + + if (resolvedPackageVersions.ContainsKey(libraryName)) + { + duplicatedPackages.Add(libraryName); + resolvedPackageVersions.Remove(libraryName); + } + + resolvedPackageVersions[libraryName] = library.Version.ToNormalizedString(); + } string frameworkAlias = _targetNameToAliasMap[target.Name];