Skip to content
This repository was archived by the owner on Jan 12, 2024. It is now read-only.

Commit 09d2c92

Browse files
williamb1024kzu
authored andcommitted
Coalesce duplicate FrameworkReferences when preparing package manifest. (#143)
* Created test to ensure duplicate framework references are coalesced into a single reference when packaging. * Moved FrameworkAssemblyReferenceComparer from Tests to Tasks project. Added Distinct() to FrameworkReference selection in AddFrameworkAssemblies when building package manifest.
1 parent 476e800 commit 09d2c92

File tree

3 files changed

+52
-8
lines changed

3 files changed

+52
-8
lines changed

src/Build/NuGet.Build.Packaging.Tasks/CreatePackage.cs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -179,13 +179,13 @@ void AddFiles(Manifest manifest)
179179

180180
void AddFrameworkAssemblies(Manifest manifest)
181181
{
182-
var frameworkReferences = from item in Contents
183-
where item.GetMetadata(MetadataName.Kind) == PackageItemKind.FrameworkReference
184-
select new FrameworkAssemblyReference
185-
(
186-
item.ItemSpec,
187-
new [] { NuGetFramework.Parse(item.GetTargetFrameworkMoniker().FullName) }
188-
);
182+
var frameworkReferences = (from item in Contents
183+
where item.GetMetadata(MetadataName.Kind) == PackageItemKind.FrameworkReference
184+
select new FrameworkAssemblyReference
185+
(
186+
item.ItemSpec,
187+
new[] { NuGetFramework.Parse(item.GetTargetFrameworkMoniker().FullName) }
188+
)).Distinct(FrameworkAssemblyReferenceComparer.Default);
189189

190190
manifest.Metadata.FrameworkReferences = frameworkReferences;
191191
}

src/Build/NuGet.Build.Packaging.Tests/Utilities/FrameworkAssemblyReferenceComparer.cs renamed to src/Build/NuGet.Build.Packaging.Tasks/FrameworkAssemblyReferenceComparer.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
using System.Linq;
44
using NuGet.Packaging;
55

6-
namespace NuGet.Build.Packaging
6+
namespace NuGet.Build.Packaging.Tasks
77
{
88
public class FrameworkAssemblyReferenceComparer : IEqualityComparer<FrameworkAssemblyReference>
99
{

src/Build/NuGet.Build.Packaging.Tests/CreatePackageTests.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -544,5 +544,49 @@ public void when_creating_package_with_framework_reference_then_contains_referen
544544

545545
Assert.NotNull(manifest);
546546
}
547+
548+
[Fact]
549+
public void when_creating_package_with_duplicate_framework_references_then_contains_only_unique_references()
550+
{
551+
task.Contents = new[]
552+
{
553+
new TaskItem("System.Xml", new Metadata
554+
{
555+
{ MetadataName.PackageId, task.Manifest.GetMetadata("Id") },
556+
{ MetadataName.Kind, PackageItemKind.FrameworkReference },
557+
{ MetadataName.TargetFrameworkMoniker, TargetFrameworks.NET45 }
558+
}),
559+
new TaskItem("System.Xml", new Metadata
560+
{
561+
{ MetadataName.PackageId, task.Manifest.GetMetadata("Id") },
562+
{ MetadataName.Kind, PackageItemKind.FrameworkReference },
563+
{ MetadataName.TargetFrameworkMoniker, TargetFrameworks.NET45 }
564+
}),
565+
new TaskItem("System.Xml", new Metadata
566+
{
567+
{ MetadataName.PackageId, task.Manifest.GetMetadata("Id") },
568+
{ MetadataName.Kind, PackageItemKind.FrameworkReference },
569+
{ MetadataName.TargetFrameworkMoniker, TargetFrameworks.PCL78 }
570+
}),
571+
new TaskItem("System.Xml", new Metadata
572+
{
573+
{ MetadataName.PackageId, task.Manifest.GetMetadata("Id") },
574+
{ MetadataName.Kind, PackageItemKind.FrameworkReference },
575+
{ MetadataName.TargetFrameworkMoniker, TargetFrameworks.PCL78 }
576+
}),
577+
};
578+
579+
var manifest = ExecuteTask();
580+
581+
Assert.Equal(manifest.Metadata.FrameworkReferences,
582+
new[]
583+
{
584+
new FrameworkAssemblyReference("System.Xml", new [] { NuGetFramework.Parse(TargetFrameworks.NET45) }),
585+
new FrameworkAssemblyReference("System.Xml", new [] { NuGetFramework.Parse(TargetFrameworks.PCL78) }),
586+
},
587+
FrameworkAssemblyReferenceComparer.Default);
588+
589+
Assert.NotNull(manifest);
590+
}
547591
}
548592
}

0 commit comments

Comments
 (0)