From 3e374fc422199c635be396159d45f206f8e03c81 Mon Sep 17 00:00:00 2001 From: Sarah Oslund Date: Fri, 10 Apr 2020 15:05:55 -0700 Subject: [PATCH 1/3] Adding test coverage for single reference assembly package ref when multitargeting --- ...T.Sdk.FrameworkReferenceResolution.targets | 2 +- ...tWeWantAutomaticTargetingPackReferences.cs | 48 ++++++++++++++----- 2 files changed, 37 insertions(+), 13 deletions(-) diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.FrameworkReferenceResolution.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.FrameworkReferenceResolution.targets index 7163b71b8c6c..1c340d367e08 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.FrameworkReferenceResolution.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.FrameworkReferenceResolution.targets @@ -323,7 +323,7 @@ Copyright (c) .NET Foundation. All rights reserved. Add package reference for required targeting pack if necessary ============================================================ --> - + { + var ns = project.Root.Name.Namespace; + var itemGroup = project.Root.Elements(ns + "ItemGroup").FirstOrDefault(); + itemGroup.Add(new XElement(ns + "PackageReference", + new XAttribute("Include", $"Microsoft.NETFramework.ReferenceAssemblies"), + new XAttribute("Version", $"1.0.0-preview.2"))); + }); + } + else + { + testAsset = _testAssetsManager.CreateTestProject(testProject); + } string projectAssetsJsonPath = Path.Combine( testAsset.Path, @@ -80,16 +98,19 @@ public void It_restores_multitargeted_net_framework_project_successfully() "obj", "project.assets.json"); - var restoreCommand = - testAsset.GetRestoreCommand(Log, relativePath: testProject.Name); - restoreCommand.Execute().Should().Pass(); + var restoreCommand = testAsset.GetRestoreCommand(Log, relativePath: testProject.Name); + restoreCommand.Execute() + .Should() + .Pass() + .And + .NotHaveStdOutContaining("NETSDK1023"); LockFile lockFile = LockFileUtilities.GetLockFile( projectAssetsJsonPath, NullLogger.Instance); var net471FrameworkLibrary = lockFile.GetTarget(NuGetFramework.Parse(".NETFramework,Version=v4.7.1"), null).Libraries.FirstOrDefault((file) => file.Name.Contains("net471")); - if (TestProject.ReferenceAssembliesAreInstalled(TargetDotNetFrameworkVersion.Version471)) + if (TestProject.ReferenceAssembliesAreInstalled(TargetDotNetFrameworkVersion.Version471) && !includeExplicitReference) { net471FrameworkLibrary.Should().BeNull(); } @@ -101,7 +122,7 @@ public void It_restores_multitargeted_net_framework_project_successfully() var net472FrameworkLibrary = lockFile.GetTarget(NuGetFramework.Parse(".NETFramework,Version=v4.7.2"), null).Libraries.FirstOrDefault((file) => file.Name.Contains("net472")); - if (TestProject.ReferenceAssembliesAreInstalled(TargetDotNetFrameworkVersion.Version472)) + if (TestProject.ReferenceAssembliesAreInstalled(TargetDotNetFrameworkVersion.Version472) && !includeExplicitReference) { net472FrameworkLibrary.Should().BeNull(); } @@ -130,7 +151,7 @@ public void It_restores_net_framework_project_with_existing_references() var itemGroup = project.Root.Elements(ns + "ItemGroup").FirstOrDefault(); itemGroup.Add(new XElement(ns + "PackageReference", new XAttribute("Include", $"Microsoft.NETFramework.ReferenceAssemblies"), - new XAttribute("Version", $"1.0.0-preview.2"))); + new XAttribute("Version", $"1.0.0"))); }); @@ -142,15 +163,18 @@ public void It_restores_net_framework_project_with_existing_references() var restoreCommand = testAsset.GetRestoreCommand(Log, relativePath: testProject.Name); - restoreCommand.Execute().Should().Pass(); + restoreCommand.Execute() + .Should() + .Pass() + .And + .NotHaveStdOutContaining("NETSDK1023"); LockFile lockFile = LockFileUtilities.GetLockFile(projectAssetsJsonPath, NullLogger.Instance); var netFrameworkLibrary = lockFile.GetTarget(NuGetFramework.Parse(".NETFramework,Version=v4.7.1"), null).Libraries.FirstOrDefault((file) => file.Name.Contains(targetFramework)); - netFrameworkLibrary.Name.Should().Be("Microsoft.NETFramework.ReferenceAssemblies." + targetFramework); netFrameworkLibrary.Type.Should().Be("package"); - netFrameworkLibrary.Version.ToFullString().Should().Be("1.0.0-preview.2"); + netFrameworkLibrary.Version.ToFullString().Should().Be("1.0.0"); } } } From 2c3b3f61ea837ca2695751c48d9fe6210ca783a0 Mon Sep 17 00:00:00 2001 From: Sarah Oslund Date: Mon, 13 Apr 2020 16:44:43 -0700 Subject: [PATCH 2/3] Adding implicit assembly pack package reference only when not explicitly added --- ...rosoft.NET.Sdk.FrameworkReferenceResolution.targets | 10 ++++++++-- .../GivenThatWeWantAutomaticTargetingPackReferences.cs | 7 ++++++- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.FrameworkReferenceResolution.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.FrameworkReferenceResolution.targets index 1c340d367e08..2e351652e6f9 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.FrameworkReferenceResolution.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.FrameworkReferenceResolution.targets @@ -323,7 +323,7 @@ Copyright (c) .NET Foundation. All rights reserved. Add package reference for required targeting pack if necessary ============================================================ --> - + + + <_PackageReferenceList>@(PackageReference) + <_PackageReferencesContainsRefAssemblies>$(_PackageReferenceList.Contains('Microsoft.NETFramework.ReferenceAssemblies')) + - + diff --git a/src/Tests/Microsoft.NET.Restore.Tests/GivenThatWeWantAutomaticTargetingPackReferences.cs b/src/Tests/Microsoft.NET.Restore.Tests/GivenThatWeWantAutomaticTargetingPackReferences.cs index d4579c1eb2fa..56e584b3e7ae 100644 --- a/src/Tests/Microsoft.NET.Restore.Tests/GivenThatWeWantAutomaticTargetingPackReferences.cs +++ b/src/Tests/Microsoft.NET.Restore.Tests/GivenThatWeWantAutomaticTargetingPackReferences.cs @@ -149,10 +149,15 @@ public void It_restores_net_framework_project_with_existing_references() { var ns = project.Root.Name.Namespace; var itemGroup = project.Root.Elements(ns + "ItemGroup").FirstOrDefault(); + itemGroup.Add(new XElement(ns + "PackageReference", + new XAttribute("Include", $"Newtonsoft.Json"), + new XAttribute("Version", $"11.0.2"))); + itemGroup.Add(new XElement(ns + "PackageReference", + new XAttribute("Include", $"sqlite"), + new XAttribute("Version", $"3.13.0"))); itemGroup.Add(new XElement(ns + "PackageReference", new XAttribute("Include", $"Microsoft.NETFramework.ReferenceAssemblies"), new XAttribute("Version", $"1.0.0"))); - }); string projectAssetsJsonPath = Path.Combine( From 906e277a0d1a15ce652a88741eedd7ac3df77ec9 Mon Sep 17 00:00:00 2001 From: Sarah Oslund Date: Fri, 17 Apr 2020 09:42:49 -0700 Subject: [PATCH 3/3] Cleaning up condition for automatically including assembly pack references --- ...rosoft.NET.Sdk.FrameworkReferenceResolution.targets | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.FrameworkReferenceResolution.targets b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.FrameworkReferenceResolution.targets index 2e351652e6f9..cca9e91baa7a 100644 --- a/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.FrameworkReferenceResolution.targets +++ b/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Sdk.FrameworkReferenceResolution.targets @@ -333,15 +333,13 @@ Copyright (c) .NET Foundation. All rights reserved. SuppressNotFoundError="true"> - - - <_PackageReferenceList>@(PackageReference) - <_PackageReferencesContainsRefAssemblies>$(_PackageReferenceList.Contains('Microsoft.NETFramework.ReferenceAssemblies')) - + + <_ExistingReferenceAssembliesPackageReference Include="@(PackageReference)" Condition="'%(PackageReference.Identity)' == 'Microsoft.NETFramework.ReferenceAssemblies'"/> + + Condition="'$(_FullFrameworkReferenceAssemblyPaths)' == '' and '@(_ExistingReferenceAssembliesPackageReference)' == ''"/>