From 851e2a3436d2204b37ce8669a07008e2413ab912 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kat=20March=C3=A1n?= Date: Tue, 13 Oct 2020 11:45:23 -0700 Subject: [PATCH 1/2] correctly suppress aliased dependencies according to request Fixes: https://github.com/nuget/home/issues/10097 --- .../NuGet.Build.Tasks.Pack/PackTaskLogic.cs | 21 +++++++++++- .../PackCommandTests.cs | 34 +++++++++++++++++++ 2 files changed, 54 insertions(+), 1 deletion(-) diff --git a/src/NuGet.Core/NuGet.Build.Tasks.Pack/PackTaskLogic.cs b/src/NuGet.Core/NuGet.Build.Tasks.Pack/PackTaskLogic.cs index 5398346fc39..be4f4e8ca26 100644 --- a/src/NuGet.Core/NuGet.Build.Tasks.Pack/PackTaskLogic.cs +++ b/src/NuGet.Core/NuGet.Build.Tasks.Pack/PackTaskLogic.cs @@ -219,13 +219,32 @@ public PackageBuilder GetPackageBuilder(IPackTaskRequest request) .ToDictionary(msbuildItem => msbuildItem.Identity, msbuildItem => msbuildItem.GetProperty("ProjectVersion"), PathUtility.GetStringComparerBasedOnOS()); } + + var aliases = new Dictionary(); + foreach (var tfm in assetsFile.PackageSpec.TargetFrameworks) + { + aliases[tfm.TargetAlias] = tfm.FrameworkName.GetShortFolderName(); + } + var nuGetFrameworkComparer = new NuGetFrameworkFullComparer(); var frameworksWithSuppressedDependencies = new HashSet(nuGetFrameworkComparer); if (request.FrameworksWithSuppressedDependencies != null && request.FrameworksWithSuppressedDependencies.Any()) { frameworksWithSuppressedDependencies = new HashSet(request.FrameworksWithSuppressedDependencies - .Select(t => NuGetFramework.Parse(t.Identity)).ToList(), nuGetFrameworkComparer); + .Select(t => + { + string translated = null; + var succeeded = aliases.TryGetValue(t.Identity, out translated); + if (succeeded) + { + return NuGetFramework.Parse(translated); + } + else + { + return NuGetFramework.Parse(t.Identity); + } + }).ToList(), nuGetFrameworkComparer); } PopulateProjectAndPackageReferences(builder, diff --git a/test/NuGet.Core.FuncTests/Dotnet.Integration.Test/PackCommandTests.cs b/test/NuGet.Core.FuncTests/Dotnet.Integration.Test/PackCommandTests.cs index 40390238ca2..cbe3811ead1 100644 --- a/test/NuGet.Core.FuncTests/Dotnet.Integration.Test/PackCommandTests.cs +++ b/test/NuGet.Core.FuncTests/Dotnet.Integration.Test/PackCommandTests.cs @@ -73,6 +73,40 @@ public void PackCommand_PackNewDefaultProject_NupkgExists() } } + [PlatformFact(Platform.Windows)] + public void PackCommand_PackToolUsingAlias_DoesNotWarn() + { + using (var testDirectory = msbuildFixture.CreateTestDirectory()) + { + // Arrange + var projectName = "ConsoleApp1"; + var workingDirectory = Path.Combine(testDirectory, projectName); + msbuildFixture.CreateDotnetNewProject(testDirectory.Path, projectName, " console"); + var projectFile = Path.Combine(workingDirectory, $"{projectName}.csproj"); + using (var stream = new FileStream(projectFile, FileMode.Open, FileAccess.ReadWrite)) + { + var xml = XDocument.Load(stream); + + ProjectFileUtils.AddProperty(xml, "PackAsTool", "true"); + ProjectFileUtils.ChangeProperty(xml, "TargetFramework", "myalias"); + + var tfmProps = new Dictionary(); + tfmProps["TargetFrameworkIdentifier"] = ".NETCoreApp"; + tfmProps["TargetFrameworkVersion"] = "v3.1"; + tfmProps["TargetFrameworkMoniker"] = ".NETCoreApp,Version=v3.1"; + ProjectFileUtils.AddProperties(xml, tfmProps, " '$(TargetFramework)' == 'myalias' "); + + ProjectFileUtils.WriteXmlToFile(xml, stream); + } + + // Act + msbuildFixture.RestoreProject(workingDirectory, projectName, string.Empty); + var result = msbuildFixture.PackProject(workingDirectory, projectName, $"-o {workingDirectory}"); + + result.AllOutput.Should().NotContain("NU5128"); + } + } + [PlatformFact(Platform.Windows)] public void PackCommand_PackNewDefaultProject_IncludeSymbolsWithSnupkg() { From a2f8cfce771b2668ba74f605099bdff681634727 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kat=20March=C3=A1n?= Date: Wed, 14 Oct 2020 16:35:20 -0700 Subject: [PATCH 2/2] review --- src/NuGet.Core/NuGet.Build.Tasks.Pack/PackTaskLogic.cs | 4 +--- .../Dotnet.Integration.Test/PackCommandTests.cs | 4 +++- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/NuGet.Core/NuGet.Build.Tasks.Pack/PackTaskLogic.cs b/src/NuGet.Core/NuGet.Build.Tasks.Pack/PackTaskLogic.cs index be4f4e8ca26..e7174729f32 100644 --- a/src/NuGet.Core/NuGet.Build.Tasks.Pack/PackTaskLogic.cs +++ b/src/NuGet.Core/NuGet.Build.Tasks.Pack/PackTaskLogic.cs @@ -234,9 +234,7 @@ public PackageBuilder GetPackageBuilder(IPackTaskRequest request) new HashSet(request.FrameworksWithSuppressedDependencies .Select(t => { - string translated = null; - var succeeded = aliases.TryGetValue(t.Identity, out translated); - if (succeeded) + if (aliases.TryGetValue(t.Identity, out string translated)) { return NuGetFramework.Parse(translated); } diff --git a/test/NuGet.Core.FuncTests/Dotnet.Integration.Test/PackCommandTests.cs b/test/NuGet.Core.FuncTests/Dotnet.Integration.Test/PackCommandTests.cs index cbe3811ead1..f208f7ad719 100644 --- a/test/NuGet.Core.FuncTests/Dotnet.Integration.Test/PackCommandTests.cs +++ b/test/NuGet.Core.FuncTests/Dotnet.Integration.Test/PackCommandTests.cs @@ -74,8 +74,9 @@ public void PackCommand_PackNewDefaultProject_NupkgExists() } [PlatformFact(Platform.Windows)] - public void PackCommand_PackToolUsingAlias_DoesNotWarn() + public void PackCommand_PackToolUsingAlias_DoesNotWarnAboutNoExactMatchInDependencyGroupAndLibRefDirectories() { + // Ref: https://github.com/NuGet/Home/issues/10097 using (var testDirectory = msbuildFixture.CreateTestDirectory()) { // Arrange @@ -103,6 +104,7 @@ public void PackCommand_PackToolUsingAlias_DoesNotWarn() msbuildFixture.RestoreProject(workingDirectory, projectName, string.Empty); var result = msbuildFixture.PackProject(workingDirectory, projectName, $"-o {workingDirectory}"); + // Assert result.AllOutput.Should().NotContain("NU5128"); } }