From f9b87e582f34e7f29d36bb65d63f3304dd077da1 Mon Sep 17 00:00:00 2001 From: Daniel Plaisted Date: Wed, 1 May 2019 18:24:22 -0700 Subject: [PATCH 1/2] Add reference to empty Microsoft.NETCore.App package This comes via the PackagesToReference metadata on KnownFrameworkReference --- .../ResolveFrameworkReferences.cs | 26 ++++++++ .../Microsoft.NET.Sdk.DefaultItems.targets | 17 ----- ...ft.NET.Sdk.TargetingPackResolution.targets | 11 ++++ .../GivenThatWeWantToBuildANetCoreApp.cs | 63 +++++++++++++++++++ 4 files changed, 100 insertions(+), 17 deletions(-) diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/ResolveFrameworkReferences.cs b/src/Tasks/Microsoft.NET.Build.Tasks/ResolveFrameworkReferences.cs index 0016504f3fda..4d08d36743ad 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/ResolveFrameworkReferences.cs +++ b/src/Tasks/Microsoft.NET.Build.Tasks/ResolveFrameworkReferences.cs @@ -48,6 +48,9 @@ public class ResolveFrameworkReferences : TaskBase [Output] public ITaskItem[] PackagesToDownload { get; set; } + [Output] + public ITaskItem[] PackagesToReference { get; set; } + [Output] public ITaskItem[] RuntimeFrameworks { get; set; } @@ -80,6 +83,7 @@ protected override void ExecuteCore() var frameworkReferenceMap = FrameworkReferences.ToDictionary(fr => fr.ItemSpec); List packagesToDownload = new List(); + List packagesToReference = new List(); List runtimeFrameworks = new List(); List targetingPacks = new List(); List runtimePacks = new List(); @@ -91,6 +95,21 @@ protected override void ExecuteCore() { frameworkReferenceMap.TryGetValue(knownFrameworkReference.Name, out ITaskItem frameworkReference); + if (frameworkReference != null) + { + if (!string.IsNullOrEmpty(knownFrameworkReference.PackagesToReference)) + { + foreach (var packageAndVersion in knownFrameworkReference.PackagesToReference.Split(';')) + { + var items = packageAndVersion.Split('/'); + TaskItem packageToReference = new TaskItem(items[0]); + packageToReference.SetMetadata(MetadataKeys.Version, items[1]); + + packagesToReference.Add(packageToReference); + } + } + } + // Get the path of the targeting pack in the targeting pack root (e.g. dotnet/ref) TaskItem targetingPack = new TaskItem(knownFrameworkReference.Name); targetingPack.SetMetadata(MetadataKeys.PackageName, knownFrameworkReference.TargetingPackName); @@ -182,6 +201,11 @@ protected override void ExecuteCore() PackagesToDownload = packagesToDownload.ToArray(); } + if (packagesToReference.Any()) + { + PackagesToReference = packagesToReference.ToArray(); + } + if (runtimeFrameworks.Any()) { RuntimeFrameworks = runtimeFrameworks.ToArray(); @@ -352,6 +376,8 @@ public KnownFrameworkReference(ITaskItem item) public string RuntimePackRuntimeIdentifiers => _item.GetMetadata("RuntimePackRuntimeIdentifiers"); + public string PackagesToReference => _item.GetMetadata("PackagesToReference"); + public NuGetFramework TargetFramework { get; } } } diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.DefaultItems.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.DefaultItems.targets index 1d8380c8ae75..ad72d160c955 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.DefaultItems.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.DefaultItems.targets @@ -181,23 +181,6 @@ Copyright (c) .NET Foundation. All rights reserved. $(_TargetFrameworkVersionWithoutV) - - - diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.TargetingPackResolution.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.TargetingPackResolution.targets index cc0247e3f7d1..4a7fe6d623e8 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.TargetingPackResolution.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.TargetingPackResolution.targets @@ -91,6 +91,7 @@ Copyright (c) .NET Foundation. All rights reserved. EnableTargetingPackDownload="$(EnableTargetingPackDownload)"> + @@ -141,6 +142,16 @@ Copyright (c) .NET Foundation. All rights reserved. ExcludeAssets="all" /> + + + + + diff --git a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildANetCoreApp.cs b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildANetCoreApp.cs index b4940f269373..e67fb149f560 100644 --- a/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildANetCoreApp.cs +++ b/src/Tests/Microsoft.NET.Build.Tests/GivenThatWeWantToBuildANetCoreApp.cs @@ -616,5 +616,68 @@ static void Main(string[] args) .Should() .Pass(); } + + [Fact(Skip = "https://github.com/dotnet/sdk/issues/3044")] + public void ReferenceLegacyContracts() + { + var testProject = new TestProject() + { + Name = "ReferencesLegacyContracts", + TargetFrameworks = "netcoreapp3.0", + IsSdkProject = true, + IsExe = true, + RuntimeIdentifier = EnvironmentInfo.GetCompatibleRid("netcoreapp3.0") + }; + + // Dependencies on contracts from different 1.x "bands" can cause downgrades when building + // with a RuntimeIdentifier. + testProject.PackageReferences.Add(new TestPackageReference("System.IO.FileSystem", "4.0.1")); + testProject.PackageReferences.Add(new TestPackageReference("System.Reflection", "4.3.0")); + + + var testAsset = _testAssetsManager.CreateTestProject(testProject, testProject.Name) + .Restore(Log, testProject.Name); + + var buildCommand = new BuildCommand(Log, Path.Combine(testAsset.TestRoot, testProject.Name)); + + buildCommand + .Execute() + .Should() + .Pass(); + } + + [Fact] + public void ItHasNoPackageReferences() + { + var testProject = new TestProject() + { + Name = "NoPackageReferences", + TargetFrameworks = "netcoreapp3.0", + IsSdkProject = true, + IsExe = true + }; + + var testAsset = _testAssetsManager.CreateTestProject(testProject, testProject.Name) + .Restore(Log, testProject.Name); + + string testDirectory = Path.Combine(testAsset.TestRoot, testProject.Name); + + var getPackageReferences = new GetValuesCommand( + Log, + testDirectory, + testProject.TargetFrameworks, + "PackageReference", + GetValuesCommand.ValueType.Item); + + getPackageReferences.Execute().Should().Pass(); + + List packageReferences = getPackageReferences.GetValues(); + + packageReferences + .Should() + .BeEmpty(); + + + } } } From 900de200b7f24e8128e38815efa81468fd78ab58 Mon Sep 17 00:00:00 2001 From: Daniel Plaisted Date: Thu, 2 May 2019 13:14:46 -0700 Subject: [PATCH 2/2] Use better name for package references to add --- .../ResolveFrameworkReferences.cs | 27 +++++++++++++------ ...ft.NET.Sdk.TargetingPackResolution.targets | 6 ++--- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/ResolveFrameworkReferences.cs b/src/Tasks/Microsoft.NET.Build.Tasks/ResolveFrameworkReferences.cs index 4d08d36743ad..ab5baf420631 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/ResolveFrameworkReferences.cs +++ b/src/Tasks/Microsoft.NET.Build.Tasks/ResolveFrameworkReferences.cs @@ -49,7 +49,7 @@ public class ResolveFrameworkReferences : TaskBase public ITaskItem[] PackagesToDownload { get; set; } [Output] - public ITaskItem[] PackagesToReference { get; set; } + public ITaskItem[] LegacyFrameworkPackages { get; set; } [Output] public ITaskItem[] RuntimeFrameworks { get; set; } @@ -83,7 +83,7 @@ protected override void ExecuteCore() var frameworkReferenceMap = FrameworkReferences.ToDictionary(fr => fr.ItemSpec); List packagesToDownload = new List(); - List packagesToReference = new List(); + List legacyFrameworkPackages = new List(); List runtimeFrameworks = new List(); List targetingPacks = new List(); List runtimePacks = new List(); @@ -97,15 +97,15 @@ protected override void ExecuteCore() if (frameworkReference != null) { - if (!string.IsNullOrEmpty(knownFrameworkReference.PackagesToReference)) + if (!string.IsNullOrEmpty(knownFrameworkReference.LegacyFrameworkPackages)) { - foreach (var packageAndVersion in knownFrameworkReference.PackagesToReference.Split(';')) + foreach (var packageAndVersion in knownFrameworkReference.LegacyFrameworkPackages.Split(';')) { var items = packageAndVersion.Split('/'); TaskItem packageToReference = new TaskItem(items[0]); packageToReference.SetMetadata(MetadataKeys.Version, items[1]); - packagesToReference.Add(packageToReference); + legacyFrameworkPackages.Add(packageToReference); } } } @@ -201,9 +201,9 @@ protected override void ExecuteCore() PackagesToDownload = packagesToDownload.ToArray(); } - if (packagesToReference.Any()) + if (legacyFrameworkPackages.Any()) { - PackagesToReference = packagesToReference.ToArray(); + LegacyFrameworkPackages = legacyFrameworkPackages.ToArray(); } if (runtimeFrameworks.Any()) @@ -376,7 +376,18 @@ public KnownFrameworkReference(ITaskItem item) public string RuntimePackRuntimeIdentifiers => _item.GetMetadata("RuntimePackRuntimeIdentifiers"); - public string PackagesToReference => _item.GetMetadata("PackagesToReference"); + public string LegacyFrameworkPackages + { + get + { + var packages = _item.GetMetadata("LegacyFrameworkPackages"); + if (string.IsNullOrEmpty(packages)) + { + packages = _item.GetMetadata("PackagesToReference"); + } + return packages; + } + } public NuGetFramework TargetFramework { get; } } diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.TargetingPackResolution.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.TargetingPackResolution.targets index 4a7fe6d623e8..83202893ba31 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.TargetingPackResolution.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.TargetingPackResolution.targets @@ -91,7 +91,7 @@ Copyright (c) .NET Foundation. All rights reserved. EnableTargetingPackDownload="$(EnableTargetingPackDownload)"> - + @@ -142,11 +142,11 @@ Copyright (c) .NET Foundation. All rights reserved. ExcludeAssets="all" /> - -