Ensure Microsoft.CSharp reference is not duplicated

This commit is contained in:
Troy Dai 2016-02-26 10:54:17 -08:00
parent 14e8b184bd
commit 268dd603cc
4 changed files with 53 additions and 9 deletions

View file

@ -0,0 +1,10 @@
namespace TestMicrosoftCSharpReference
{
public class Program
{
public static int Main(string[] args)
{
return 0;
}
}
}

View file

@ -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-*"
}
}
}
}

View file

@ -44,7 +44,10 @@ namespace Microsoft.DotNet.ProjectModel.Resolution
{
// This never returns null
var targetFrameworkInfo = project.GetTargetFramework(targetFramework);
var dependencies = new List<LibraryRange>(targetFrameworkInfo.Dependencies);
var dependencies = new List<LibraryRange>(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)
{

View file

@ -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());
}
}
}