| File: GetSupportedPackagesFromPackageReports.cs | Web Access |
| Project: src\arcade\src\Microsoft.DotNet.Build.Tasks.Packaging\src\Microsoft.DotNet.Build.Tasks.Packaging.csproj (Microsoft.DotNet.Build.Tasks.Packaging) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using Microsoft.Build.Framework; using Microsoft.Build.Utilities; using Newtonsoft.Json; using NuGet.Frameworks; using System; using System.Collections.Generic; using System.Linq; namespace Microsoft.DotNet.Build.Tasks.Packaging { public class GetSupportedPackagesFromPackageReports : BuildTask { [Required] public string[] PackageReports { get; set; } [Output] public ITaskItem[] SupportedPackages { get; set; } public override bool Execute() { var supportedPackages = new List<ITaskItem>(); foreach (var packageReport in PackageReports.NullAsEmpty()) { var report = PackageReport.Load(packageReport); var packageId = report.Id; var packageVersion = report.Version; var supportedTargets = report.Targets.Values.Where(target => report.SupportedFrameworks.ContainsKey(target.Framework)); var fxRIDGroupings = supportedTargets.GroupBy(target => target.Framework, target => target.RuntimeID); foreach (var fxRIDGrouping in fxRIDGroupings) { var fx = fxRIDGrouping.Key; var rids = fxRIDGrouping.ToArray(); var nugetFx = NuGetFramework.Parse(fx); var supportedPackage = new TaskItem(packageId); supportedPackage.SetMetadata("Version", packageVersion); supportedPackage.SetMetadata("TargetFramework", fx); supportedPackage.SetMetadata("TargetFrameworkShort", nugetFx.GetShortFolderName()); var ridList = string.Join(";", rids); if (!String.IsNullOrEmpty(ridList)) { supportedPackage.SetMetadata("RuntimeIdentifiers", ridList); } supportedPackages.Add(supportedPackage); } } SupportedPackages = supportedPackages.ToArray(); return !Log.HasLoggedErrors; } } }