From a0db5086f6283ca91bc676fdc36d509488c8b8c9 Mon Sep 17 00:00:00 2001 From: Pavel Krymets Date: Tue, 8 Mar 2016 09:22:17 -0800 Subject: [PATCH] Fix dependency context builder regression --- .../DependencyContextBuilder.cs | 2 +- .../DependencyContextBuilderTests.cs | 28 +++++++++++++++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/src/Microsoft.DotNet.ProjectModel/DependencyContextBuilder.cs b/src/Microsoft.DotNet.ProjectModel/DependencyContextBuilder.cs index da9ad8444..b7eab17a4 100644 --- a/src/Microsoft.DotNet.ProjectModel/DependencyContextBuilder.cs +++ b/src/Microsoft.DotNet.ProjectModel/DependencyContextBuilder.cs @@ -84,7 +84,7 @@ namespace Microsoft.Extensions.DependencyModel var type = export.Library.Identity.Type; var serviceable = (export.Library as PackageDescription)?.Library.IsServiceable ?? false; - var libraryDependencies = new List(); + var libraryDependencies = new HashSet(); var libraryAssets = runtime ? export.RuntimeAssemblies : export.CompilationAssemblies; diff --git a/test/Microsoft.Extensions.DependencyModel.Tests/DependencyContextBuilderTests.cs b/test/Microsoft.Extensions.DependencyModel.Tests/DependencyContextBuilderTests.cs index 13eaefaa0..ac336d97c 100644 --- a/test/Microsoft.Extensions.DependencyModel.Tests/DependencyContextBuilderTests.cs +++ b/test/Microsoft.Extensions.DependencyModel.Tests/DependencyContextBuilderTests.cs @@ -135,6 +135,34 @@ namespace Microsoft.Extensions.DependencyModel.Tests asm.Assemblies.Should().OnlyContain(l => l.Path == "System.Collections.dll"); } + [Fact] + public void FiltersDuplicatedDependencies() + { + var context = Build(runtimeExports: new[] + { + Export(PackageDescription("Pack.Age", + dependencies: new[] + { + new LibraryRange("System.Collections", + new VersionRange(new NuGetVersion(2, 0, 0)), + LibraryType.ReferenceAssembly, + LibraryDependencyType.Default), + new LibraryRange("System.Collections", + new VersionRange(new NuGetVersion(2, 1, 2)), + LibraryType.Package, + LibraryDependencyType.Default) + }) + ), + Export(ReferenceAssemblyDescription("System.Collections", + version: new NuGetVersion(2, 0, 0))) + }); + + context.RuntimeLibraries.Should().HaveCount(2); + + var lib = context.RuntimeLibraries.Should().Contain(l => l.Name == "Pack.Age").Subject; + lib.Dependencies.Should().HaveCount(1); + lib.Dependencies.Should().OnlyContain(l => l.Name == "System.Collections" && l.Version == "2.0.0"); + } [Fact] public void FillsCompileLibraryProperties()