diff --git a/src/NuGet.Core/NuGet.Build.Tasks.Pack/PackTaskLogic.cs b/src/NuGet.Core/NuGet.Build.Tasks.Pack/PackTaskLogic.cs index 5398346fc39..e7174729f32 100644 --- a/src/NuGet.Core/NuGet.Build.Tasks.Pack/PackTaskLogic.cs +++ b/src/NuGet.Core/NuGet.Build.Tasks.Pack/PackTaskLogic.cs @@ -219,13 +219,30 @@ 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 => + { + if (aliases.TryGetValue(t.Identity, out string translated)) + { + 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..f208f7ad719 100644 --- a/test/NuGet.Core.FuncTests/Dotnet.Integration.Test/PackCommandTests.cs +++ b/test/NuGet.Core.FuncTests/Dotnet.Integration.Test/PackCommandTests.cs @@ -73,6 +73,42 @@ public void PackCommand_PackNewDefaultProject_NupkgExists() } } + [PlatformFact(Platform.Windows)] + public void PackCommand_PackToolUsingAlias_DoesNotWarnAboutNoExactMatchInDependencyGroupAndLibRefDirectories() + { + // Ref: https://github.com/NuGet/Home/issues/10097 + 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}"); + + // Assert + result.AllOutput.Should().NotContain("NU5128"); + } + } + [PlatformFact(Platform.Windows)] public void PackCommand_PackNewDefaultProject_IncludeSymbolsWithSnupkg() {