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..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 @@ -323,7 +323,7 @@ Copyright (c) .NET Foundation. All rights reserved. Add package reference for required targeting pack if necessary ============================================================ --> - + - + <_ExistingReferenceAssembliesPackageReference Include="@(PackageReference)" Condition="'%(PackageReference.Identity)' == 'Microsoft.NETFramework.ReferenceAssemblies'"/> + + diff --git a/src/Tests/Microsoft.NET.Restore.Tests/GivenThatWeWantAutomaticTargetingPackReferences.cs b/src/Tests/Microsoft.NET.Restore.Tests/GivenThatWeWantAutomaticTargetingPackReferences.cs index a438e10d9988..56e584b3e7ae 100644 --- a/src/Tests/Microsoft.NET.Restore.Tests/GivenThatWeWantAutomaticTargetingPackReferences.cs +++ b/src/Tests/Microsoft.NET.Restore.Tests/GivenThatWeWantAutomaticTargetingPackReferences.cs @@ -62,8 +62,10 @@ public void It_restores_net_framework_project_successfully(string version) } } - [Fact] - public void It_restores_multitargeted_net_framework_project_successfully() + [Theory] + [InlineData(true)] + [InlineData(false)] + public void It_restores_multitargeted_net_framework_project_successfully(bool includeExplicitReference) { var testProject = new TestProject() { @@ -72,7 +74,23 @@ public void It_restores_multitargeted_net_framework_project_successfully() IsSdkProject = true, }; - var testAsset = _testAssetsManager.CreateTestProject(testProject); + TestAsset testAsset = null; + if (includeExplicitReference) + { + // Add explicit reference to assembly packs + testAsset = _testAssetsManager.CreateTestProject(testProject).WithProjectChanges(project => + { + 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(); } @@ -128,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-preview.2"))); - + new XAttribute("Version", $"1.0.0"))); }); string projectAssetsJsonPath = Path.Combine( @@ -142,15 +168,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"); } } }