-
Notifications
You must be signed in to change notification settings - Fork 702
/
Copy pathBuildIntegratedPackageReference.cs
110 lines (97 loc) · 3.99 KB
/
BuildIntegratedPackageReference.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
// 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.
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);
}
}
}