| File: parent\Common\ConflictResolution\PackageOverride.cs | Web Access |
| Project: Microsoft.NET.Build.Extensions.Tasks.csproj (Microsoft.NET.Build.Extensions.Tasks) |
// 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; #if EXTENSIONS using OverrideVersion = System.Version; #else using OverrideVersion = NuGet.Versioning.NuGetVersion; using NuGet.Versioning; #endif namespace Microsoft.NET.Build.Tasks.ConflictResolution { /// <summary> /// A PackageOverride contains information about a package that overrides /// a set of packages up to a certain version. /// </summary> /// <remarks> /// For example, Microsoft.NETCore.App overrides System.Console up to version 4.3.0, /// System.IO up to version version 4.3.0, etc. /// </remarks> internal class PackageOverride { public string PackageName { get; } public Dictionary<string, OverrideVersion> OverriddenPackages { get; } private PackageOverride(string packageName, IEnumerable<(string id, OverrideVersion version)> overriddenPackages) { PackageName = packageName; OverriddenPackages = new Dictionary<string, OverrideVersion>(StringComparer.OrdinalIgnoreCase); foreach (var package in overriddenPackages) { OverriddenPackages[package.id] = package.version; } } public static PackageOverride Create(ITaskItem packageOverrideItem) { string packageName = packageOverrideItem.ItemSpec; string overriddenPackagesString = packageOverrideItem.GetMetadata(MetadataKeys.OverriddenPackages); return new PackageOverride(packageName, CreateOverriddenPackages(overriddenPackagesString)); } private static IEnumerable<(string id, OverrideVersion version)> CreateOverriddenPackages(string overriddenPackagesString) { if (!string.IsNullOrEmpty(overriddenPackagesString)) { overriddenPackagesString = overriddenPackagesString.Trim(); string[] overriddenPackagesAndVersions = overriddenPackagesString.Split(new char[] { ';', '\r', '\n', ' ' }, StringSplitOptions.RemoveEmptyEntries); return CreateOverriddenPackages(overriddenPackagesAndVersions); } return Enumerable.Empty<(string id, OverrideVersion version)>(); } public static IEnumerable<(string id, OverrideVersion version)> CreateOverriddenPackages(IEnumerable<string> packageOverrideFileLines) { foreach (string overriddenPackagesAndVersion in packageOverrideFileLines) { string trimmedOverriddenPackagesAndVersion = overriddenPackagesAndVersion.Trim(); int separatorIndex = trimmedOverriddenPackagesAndVersion.IndexOf('|'); if (separatorIndex != -1) { string versionString = trimmedOverriddenPackagesAndVersion.Substring(separatorIndex + 1); string overriddenPackage = trimmedOverriddenPackagesAndVersion.Substring(0, separatorIndex); if (OverrideVersion.TryParse(versionString, out OverrideVersion? version)) { yield return (overriddenPackage, version); } } } } } }