From 268dd603cce30208725f219a00506bb649a58f47 Mon Sep 17 00:00:00 2001 From: Troy Dai Date: Fri, 26 Feb 2016 10:54:17 -0800 Subject: [PATCH] Ensure Microsoft.CSharp reference is not duplicated --- .../TestMicrosoftCSharpReference/Program.cs | 10 ++++++++ .../TestMicrosoftCSharpReference/project.json | 16 +++++++++++++ .../Resolution/ProjectDependencyProvider.cs | 13 +++++++---- .../PackageDependencyProviderTests.cs | 23 +++++++++++++++---- 4 files changed, 53 insertions(+), 9 deletions(-) create mode 100644 TestAssets/TestProjects/TestMicrosoftCSharpReference/Program.cs create mode 100644 TestAssets/TestProjects/TestMicrosoftCSharpReference/project.json diff --git a/TestAssets/TestProjects/TestMicrosoftCSharpReference/Program.cs b/TestAssets/TestProjects/TestMicrosoftCSharpReference/Program.cs new file mode 100644 index 000000000..9e98f0216 --- /dev/null +++ b/TestAssets/TestProjects/TestMicrosoftCSharpReference/Program.cs @@ -0,0 +1,10 @@ +namespace TestMicrosoftCSharpReference +{ + public class Program + { + public static int Main(string[] args) + { + return 0; + } + } +} \ No newline at end of file diff --git a/TestAssets/TestProjects/TestMicrosoftCSharpReference/project.json b/TestAssets/TestProjects/TestMicrosoftCSharpReference/project.json new file mode 100644 index 000000000..c84c8945e --- /dev/null +++ b/TestAssets/TestProjects/TestMicrosoftCSharpReference/project.json @@ -0,0 +1,16 @@ +{ + "version": "1.0.0", + "dependencies": { }, + "frameworks": { + "dnxcore50": { + "dependencies": { + "NETStandard.Library": "1.0.0-rc2-23811" + } + }, + "dnx451": { + "dependencies": { + "Microsoft.CSharp": "4.0.1-*" + } + } + } +} \ No newline at end of file diff --git a/src/Microsoft.DotNet.ProjectModel/Resolution/ProjectDependencyProvider.cs b/src/Microsoft.DotNet.ProjectModel/Resolution/ProjectDependencyProvider.cs index d809b8343..9ac490033 100644 --- a/src/Microsoft.DotNet.ProjectModel/Resolution/ProjectDependencyProvider.cs +++ b/src/Microsoft.DotNet.ProjectModel/Resolution/ProjectDependencyProvider.cs @@ -44,7 +44,10 @@ namespace Microsoft.DotNet.ProjectModel.Resolution { // This never returns null var targetFrameworkInfo = project.GetTargetFramework(targetFramework); - var dependencies = new List(targetFrameworkInfo.Dependencies); + var dependencies = new List(targetFrameworkInfo.Dependencies); + + // Add all of the project's dependencies + dependencies.AddRange(project.Dependencies); if (targetFramework != null && targetFramework.IsDesktop()) { @@ -58,13 +61,13 @@ namespace Microsoft.DotNet.ProjectModel.Resolution if (targetFramework.Version >= new Version(4, 0)) { - dependencies.Add(new LibraryRange("Microsoft.CSharp", LibraryType.ReferenceAssembly, LibraryDependencyType.Build)); + if (!dependencies.Any(dep => string.Equals(dep.Name, "Microsoft.CSharp", StringComparison.OrdinalIgnoreCase))) + { + dependencies.Add(new LibraryRange("Microsoft.CSharp", LibraryType.ReferenceAssembly, LibraryDependencyType.Build)); + } } } } - - // Add all of the project's dependencies - dependencies.AddRange(project.Dependencies); if (targetLibrary != null) { diff --git a/test/Microsoft.DotNet.ProjectModel.Tests/PackageDependencyProviderTests.cs b/test/Microsoft.DotNet.ProjectModel.Tests/PackageDependencyProviderTests.cs index 26e005dcf..5f43f0beb 100644 --- a/test/Microsoft.DotNet.ProjectModel.Tests/PackageDependencyProviderTests.cs +++ b/test/Microsoft.DotNet.ProjectModel.Tests/PackageDependencyProviderTests.cs @@ -1,14 +1,15 @@ -using System; -using System.IO; +using System.Linq; using Microsoft.DotNet.ProjectModel.Graph; using Microsoft.DotNet.ProjectModel.Resolution; +using Microsoft.DotNet.TestFramework; +using Microsoft.DotNet.Tools.Test.Utilities; using NuGet.Frameworks; using NuGet.Versioning; using Xunit; namespace Microsoft.DotNet.ProjectModel.Tests { - public class PackageDependencyProviderTests + public class PackageDependencyProviderTests : TestBase { [Fact] public void GetDescriptionShouldNotModifyTarget() @@ -36,9 +37,23 @@ namespace Microsoft.DotNet.ProjectModel.Tests Assert.Empty(p1.CompileTimeAssemblies); Assert.Empty(p1.RuntimeAssemblies); - + Assert.Empty(p2.CompileTimeAssemblies); Assert.Empty(p2.RuntimeAssemblies); } + + [Fact] + public void SingleMicrosoftCSharpReference() + { + // https://github.com/dotnet/cli/issues/1602 + var instance = TestAssetsManager.CreateTestInstance("TestMicrosoftCSharpReference") + .WithLockFiles(); + + var context = new ProjectContextBuilder().WithProjectDirectory(instance.TestRoot) + .WithTargetFramework("dnx451") + .Build(); + + Assert.Equal(4, context.RootProject.Dependencies.Count()); + } } }