diff --git a/src/Microsoft.DotNet.PackageTesting.Tests/GetCompatibilePackageTargetFrameworksTests.cs b/src/Microsoft.DotNet.PackageTesting.Tests/GetCompatibilePackageTargetFrameworksTests.cs index 949b15ceccc..1fbcc5ff995 100644 --- a/src/Microsoft.DotNet.PackageTesting.Tests/GetCompatibilePackageTargetFrameworksTests.cs +++ b/src/Microsoft.DotNet.PackageTesting.Tests/GetCompatibilePackageTargetFrameworksTests.cs @@ -2,6 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. using System.Collections.Generic; +using System.Linq; using NuGet.Frameworks; using Xunit; @@ -135,11 +136,37 @@ public GetCompatibilePackageTargetFrameworksTests() [MemberData(nameof(PackageTfmData))] public void GetCompatibleFrameworks(List filePaths, List expectedTestFrameworks) { - Package package = new("TestPackage", "1.0.0", filePaths); + Package package = new("TestPackage", "1.0.0", filePaths, Enumerable.Empty()); IEnumerable actualTestFrameworks = GetCompatiblePackageTargetFrameworks.GetTestFrameworks(package, "netcoreapp3.1"); CollectionsEqual(expectedTestFrameworks, actualTestFrameworks); } + [Fact] + public void GetCompatibleFrameworksFromDependencies() + { + var dependencyFrameworks = new[] + { + FrameworkConstants.CommonFrameworks.NetCoreApp21, + FrameworkConstants.CommonFrameworks.NetCoreApp31, + FrameworkConstants.CommonFrameworks.NetStandard20, + FrameworkConstants.CommonFrameworks.NetStandard21, + NuGetFramework.Parse("net6.0"), + }; + Package package = new("TestPackage", "1.0.0", Enumerable.Empty(), dependencyFrameworks); + IEnumerable actualTestFrameworks = GetCompatiblePackageTargetFrameworks.GetTestFrameworks(package, "netcoreapp3.1"); + + var expectedTestFrameworks = new[] + { + NuGetFramework.Parse("net6.0"), + FrameworkConstants.CommonFrameworks.NetCoreApp31, + FrameworkConstants.CommonFrameworks.Net461, + FrameworkConstants.CommonFrameworks.Net462, + FrameworkConstants.CommonFrameworks.NetStandard20, + FrameworkConstants.CommonFrameworks.NetStandard21 + }; + CollectionsEqual(expectedTestFrameworks, actualTestFrameworks); + } + private static void CollectionsEqual(IEnumerable T1, IEnumerable T2) { foreach (var item in T1) diff --git a/src/Microsoft.DotNet.PackageTesting/NupkgParser.cs b/src/Microsoft.DotNet.PackageTesting/NupkgParser.cs index 9832e3f592a..919041292dc 100644 --- a/src/Microsoft.DotNet.PackageTesting/NupkgParser.cs +++ b/src/Microsoft.DotNet.PackageTesting/NupkgParser.cs @@ -2,6 +2,7 @@ // The .NET Foundation licenses this file to you under the MIT license. using System.Linq; +using NuGet.Frameworks; using NuGet.Packaging; namespace Microsoft.DotNet.PackageTesting @@ -16,7 +17,9 @@ public static Package CreatePackageObject(string packagePath) string packageId = nuspecReader.GetId(); string version = nuspecReader.GetVersion().ToString(); - return new Package(packageId, version, nupkgReader.GetFiles()?.Where(t => t.EndsWith(packageId + ".dll"))); + NuGetFramework[] dependencyFrameworks = nuspecReader.GetDependencyGroups().Select(dg => dg.TargetFramework).Where(tfm => tfm != null).ToArray(); + + return new Package(packageId, version, nupkgReader.GetFiles()?.Where(t => t.EndsWith(packageId + ".dll")), dependencyFrameworks); } } } diff --git a/src/Microsoft.DotNet.PackageTesting/Package.cs b/src/Microsoft.DotNet.PackageTesting/Package.cs index 8574dea2e3a..303d4713b76 100644 --- a/src/Microsoft.DotNet.PackageTesting/Package.cs +++ b/src/Microsoft.DotNet.PackageTesting/Package.cs @@ -11,7 +11,7 @@ namespace Microsoft.DotNet.PackageTesting { public class Package { - public Package(string packageId, string version, IEnumerable packageAssetPaths) + public Package(string packageId, string version, IEnumerable packageAssetPaths, IEnumerable dependencyFrameworks) { PackageId = packageId; Version = version; @@ -27,6 +27,7 @@ public Package(string packageId, string version, IEnumerable packageAsse IEnumerable RuntimeAssets = packageAssets.FindItems(conventions.Patterns.RuntimeAssemblies); FrameworksInPackageList.AddRange(RuntimeAssets.Select(t => (NuGetFramework)t.Properties["tfm"]).Distinct()); + FrameworksInPackageList.AddRange(dependencyFrameworks); FrameworksInPackage = FrameworksInPackageList.Distinct(); }