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

@ -46,6 +46,9 @@ namespace Microsoft.DotNet.ProjectModel.Resolution
var targetFrameworkInfo = project.GetTargetFramework(targetFramework); 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()) if (targetFramework != null && targetFramework.IsDesktop())
{ {
dependencies.Add(new LibraryRange("mscorlib", LibraryType.ReferenceAssembly, LibraryDependencyType.Build)); dependencies.Add(new LibraryRange("mscorlib", LibraryType.ReferenceAssembly, LibraryDependencyType.Build));
@ -57,14 +60,14 @@ namespace Microsoft.DotNet.ProjectModel.Resolution
dependencies.Add(new LibraryRange("System.Core", LibraryType.ReferenceAssembly, LibraryDependencyType.Build)); dependencies.Add(new LibraryRange("System.Core", LibraryType.ReferenceAssembly, LibraryDependencyType.Build));
if (targetFramework.Version >= new Version(4, 0)) if (targetFramework.Version >= new Version(4, 0))
{
if (!dependencies.Any(dep => string.Equals(dep.Name, "Microsoft.CSharp", StringComparison.OrdinalIgnoreCase)))
{ {
dependencies.Add(new LibraryRange("Microsoft.CSharp", LibraryType.ReferenceAssembly, LibraryDependencyType.Build)); dependencies.Add(new LibraryRange("Microsoft.CSharp", LibraryType.ReferenceAssembly, LibraryDependencyType.Build));
} }
} }
} }
}
// Add all of the project's dependencies
dependencies.AddRange(project.Dependencies);
if (targetLibrary != null) if (targetLibrary != null)
{ {

View file

@ -1,14 +1,15 @@
using System; using System.Linq;
using System.IO;
using Microsoft.DotNet.ProjectModel.Graph; using Microsoft.DotNet.ProjectModel.Graph;
using Microsoft.DotNet.ProjectModel.Resolution; using Microsoft.DotNet.ProjectModel.Resolution;
using Microsoft.DotNet.TestFramework;
using Microsoft.DotNet.Tools.Test.Utilities;
using NuGet.Frameworks; using NuGet.Frameworks;
using NuGet.Versioning; using NuGet.Versioning;
using Xunit; using Xunit;
namespace Microsoft.DotNet.ProjectModel.Tests namespace Microsoft.DotNet.ProjectModel.Tests
{ {
public class PackageDependencyProviderTests public class PackageDependencyProviderTests : TestBase
{ {
[Fact] [Fact]
public void GetDescriptionShouldNotModifyTarget() public void GetDescriptionShouldNotModifyTarget()
@ -40,5 +41,19 @@ namespace Microsoft.DotNet.ProjectModel.Tests
Assert.Empty(p2.CompileTimeAssemblies); Assert.Empty(p2.CompileTimeAssemblies);
Assert.Empty(p2.RuntimeAssemblies); 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());
}
} }
} }