| File: BuildIntegratedPackageReference.cs | Web Access |
| Project: src\nuget-client\src\NuGet.Core\NuGet.PackageManagement\NuGet.PackageManagement.csproj (NuGet.PackageManagement) |
// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. #nullable disable using System; using NuGet.Frameworks; using NuGet.LibraryModel; using NuGet.Packaging; using NuGet.Packaging.Core; using NuGet.Versioning; namespace NuGet.ProjectManagement { /// <summary> /// Extends PackageReference to include the original LibraryDependency data. /// </summary> public class BuildIntegratedPackageReference : PackageReference { /// <summary> /// LibraryDependency from the project. /// </summary> public LibraryDependency Dependency { get; } /// <summary> /// Create a PackageReference based on a LibraryDependency. /// </summary> /// <param name="dependency">Full PackageReference metadata.</param> public BuildIntegratedPackageReference(LibraryDependency dependency, NuGetFramework projectFramework) : base(GetIdentity(dependency), targetFramework: projectFramework, userInstalled: true, developmentDependency: dependency?.SuppressParent == LibraryIncludeFlags.All, requireReinstallation: false, allowedVersions: GetAllowedVersions(dependency)) { if (dependency == null) { throw new ArgumentNullException(nameof(dependency)); } Dependency = dependency; } /// <summary> /// Create a PackageReference based on a LibraryDependency. /// </summary> /// <param name="dependency">Full PackageReference metadata.</param> /// <param name="installedVersion">Package installed.</param> public BuildIntegratedPackageReference(LibraryDependency dependency, NuGetFramework projectFramework, PackageIdentity installedVersion) : base(installedVersion, targetFramework: projectFramework, userInstalled: true, developmentDependency: dependency?.SuppressParent == LibraryIncludeFlags.All, requireReinstallation: false, allowedVersions: GetAllowedVersions(dependency)) { if (dependency == null) { throw new ArgumentNullException(nameof(dependency)); } Dependency = dependency; } /// <summary> /// Convert range to a PackageIdentity /// </summary> private static PackageIdentity GetIdentity(LibraryDependency dependency) { if (dependency == null) { throw new ArgumentNullException(nameof(dependency)); } // MinVersion may not exist for ranges such as ( , 2.0.0]; var version = dependency.LibraryRange?.VersionRange?.MinVersion ?? new NuGetVersion(0, 0, 0); return new PackageIdentity(dependency.Name, version); } /// <summary> /// Get allowed version range. /// </summary> private static VersionRange GetAllowedVersions(LibraryDependency dependency) { if (dependency == null) { throw new ArgumentNullException(nameof(dependency)); } if (dependency.AutoReferenced) { var minVersion = GetMinVersion(dependency); return new VersionRange( minVersion: minVersion, includeMinVersion: true, maxVersion: minVersion, includeMaxVersion: true); } // Return null if no range existed return dependency.LibraryRange?.VersionRange; } private static NuGetVersion GetMinVersion(LibraryDependency dependency) { // MinVersion may not exist for ranges such as ( , 2.0.0]; return dependency.LibraryRange?.VersionRange?.MinVersion ?? new NuGetVersion(0, 0, 0); } } }