File: GenerateRuntimeDependencies.cs
Web Access
Project: installer.tasks.csproj (installer.tasks)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using System.Collections.Generic;
using Microsoft.Build.Framework;
using NuGet.RuntimeModel;
using NuGet.Versioning;

namespace Microsoft.DotNet.Build.Tasks;

public sealed class GenerateRuntimeDependencies : BuildTask
{
    [Required]
    public ITaskItem[] RuntimeIdentifiers { get; set; }

    [Required]
    public string PackageId { get; set; }

    [Required]
    public string PackageVersion { get; set; }

    [Required]
    public string OutputPath { get; set; }

    public override bool Execute()
    {
        if (RuntimeIdentifiers.Length == 0)
        {
            Log.LogError("At least one runtime identifier is required.");
            return false;
        }

        var runtimes = new List<RuntimeDescription>();
        var versionRange = new VersionRange(NuGetVersion.Parse(PackageVersion));
        foreach (ITaskItem rid in RuntimeIdentifiers)
        {
            var dependency = new RuntimePackageDependency($"runtime.{rid.ItemSpec}.{PackageId}", versionRange);
            var dependencySet = new RuntimeDependencySet(PackageId, new[] { dependency });
            runtimes.Add(new RuntimeDescription(rid.ItemSpec, new[] { dependencySet }));
        }

        JsonRuntimeFormat.WriteRuntimeGraph(OutputPath, new RuntimeGraph(runtimes));
        return true;
    }
}