| File: ParseTargetManifests.cs | Web Access |
| Project: src\sdk\src\Tasks\Microsoft.NET.Build.Tasks\Microsoft.NET.Build.Tasks.csproj (Microsoft.NET.Build.Tasks) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. #nullable disable using Microsoft.Build.Framework; using Microsoft.Build.Utilities; using NuGet.Packaging.Core; namespace Microsoft.NET.Build.Tasks { /// <summary> /// Parses the target manifest files into MSBuild Items. /// </summary> public sealed class ParseTargetManifests : TaskBase { public string TargetManifestFiles { get; set; } [Output] public ITaskItem[] RuntimeStorePackages { get; private set; } protected override void ExecuteCore() { string[] targetManifestFileList = TargetManifestFiles?.Split(new[] { ';' }, StringSplitOptions.RemoveEmptyEntries); if (targetManifestFileList != null && targetManifestFileList.Length > 0) { var runtimeStorePackages = new Dictionary<PackageIdentity, StringBuilder>(); foreach (var manifestFile in targetManifestFileList) { var packagesSpecified = StoreArtifactParser.Parse(manifestFile); var targetManifestFileName = Path.GetFileName(manifestFile); foreach (var pkg in packagesSpecified) { StringBuilder fileList; if (runtimeStorePackages.TryGetValue(pkg, out fileList)) { fileList.Append($";{targetManifestFileName}"); } else { runtimeStorePackages.Add(pkg, new StringBuilder(targetManifestFileName)); } } } var resultPackages = new List<ITaskItem>(); foreach (var storeEntry in runtimeStorePackages) { string packageName = storeEntry.Key.Id; string packageVersion = storeEntry.Key.Version.ToNormalizedString(); TaskItem item = new($"{packageName}/{packageVersion}"); item.SetMetadata(MetadataKeys.NuGetPackageId, packageName); item.SetMetadata(MetadataKeys.NuGetPackageVersion, packageVersion); item.SetMetadata(MetadataKeys.RuntimeStoreManifestNames, storeEntry.Value.ToString()); resultPackages.Add(item); } RuntimeStorePackages = resultPackages.ToArray(); } } } }