File: GetSupportedPackagesFromPackageReports.cs
Web Access
Project: src\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;
        }
    }
}