diff --git a/Directory.Packages.props b/Directory.Packages.props
index 9b0f0c57040..86429f49dbd 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -87,6 +87,7 @@
+
@@ -190,6 +191,7 @@
<_allowBuildFromSourcePackage Include="Microsoft.Extensions.FileSystemGlobbing" />
<_allowBuildFromSourcePackage Include="Microsoft.Web.Xdt" />
<_allowBuildFromSourcePackage Include="Newtonsoft.Json" />
+ <_allowBuildFromSourcePackage Include="System.Collections.Immutable" />
<_allowBuildFromSourcePackage Include="System.CommandLine" />
<_allowBuildFromSourcePackage Include="System.ComponentModel.Composition" />
<_allowBuildFromSourcePackage Include="System.Formats.Asn1" />
diff --git a/build/Shared/IsExternalInit.cs b/build/Shared/IsExternalInit.cs
index 8792a164950..41438e87938 100644
--- a/build/Shared/IsExternalInit.cs
+++ b/build/Shared/IsExternalInit.cs
@@ -1,8 +1,6 @@
// 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.
-#if !NET5_0_OR_GREATER
-
using System.Diagnostics;
namespace System.Runtime.CompilerServices;
@@ -13,5 +11,3 @@ namespace System.Runtime.CompilerServices;
internal static class IsExternalInit
{
}
-
-#endif
diff --git a/build/Shared/SharedExtensions.cs b/build/Shared/SharedExtensions.cs
index 79b7e13a144..c74b195bff6 100644
--- a/build/Shared/SharedExtensions.cs
+++ b/build/Shared/SharedExtensions.cs
@@ -125,5 +125,45 @@ public static void AppendInt(this StringBuilder sb, int value)
divisor /= 10;
}
}
+
+ public static int SingleIndex(this IList lst, Predicate isMatch)
+ {
+ var foundIndex = -1;
+
+ for (var index = 0; index < lst.Count; index++)
+ {
+ var item = lst[index];
+ if (isMatch(item))
+ {
+ if (foundIndex != -1)
+ {
+ throw new InvalidOperationException();
+ }
+
+ foundIndex = index;
+ }
+ }
+
+ if (foundIndex == -1)
+ {
+ throw new InvalidOperationException();
+ }
+
+ return foundIndex;
+ }
+
+ public static int FirstIndex(this IList lst, Predicate isMatch)
+ {
+ for (var index = 0; index < lst.Count; index++)
+ {
+ var item = lst[index];
+ if (isMatch(item))
+ {
+ return index;
+ }
+ }
+
+ throw new InvalidOperationException();
+ }
}
}
diff --git a/src/NuGet.Clients/NuGet.MSSigning.Extensions/ilmerge.props b/src/NuGet.Clients/NuGet.MSSigning.Extensions/ilmerge.props
index 5bf19096bb9..cf59472d630 100644
--- a/src/NuGet.Clients/NuGet.MSSigning.Extensions/ilmerge.props
+++ b/src/NuGet.Clients/NuGet.MSSigning.Extensions/ilmerge.props
@@ -23,6 +23,7 @@
+
diff --git a/src/NuGet.Clients/NuGet.PackageManagement.VisualStudio/ProjectServices/VsManagedLanguagesProjectSystemServices.cs b/src/NuGet.Clients/NuGet.PackageManagement.VisualStudio/ProjectServices/VsManagedLanguagesProjectSystemServices.cs
index d80ae7920b5..bd4ee993f93 100644
--- a/src/NuGet.Clients/NuGet.PackageManagement.VisualStudio/ProjectServices/VsManagedLanguagesProjectSystemServices.cs
+++ b/src/NuGet.Clients/NuGet.PackageManagement.VisualStudio/ProjectServices/VsManagedLanguagesProjectSystemServices.cs
@@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
+using System.Collections.Immutable;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
@@ -204,9 +205,14 @@ private static string GetReferenceMetadataValue(ProjectReference reference, stri
private static LibraryDependency ToPackageLibraryDependency(PackageReference reference, bool isCpvmEnabled)
{
// Get warning suppressions
- IList noWarn = MSBuildStringUtility.GetNuGetLogCodes(GetReferenceMetadataValue(reference, ProjectItemProperties.NoWarn));
+ ImmutableArray noWarn = MSBuildStringUtility.GetNuGetLogCodes(GetReferenceMetadataValue(reference, ProjectItemProperties.NoWarn));
- var dependency = new LibraryDependency(noWarn)
+ (var includeType, var suppressParent) = MSBuildRestoreUtility.GetLibraryDependencyIncludeFlags(
+ GetReferenceMetadataValue(reference, ProjectItemProperties.IncludeAssets),
+ GetReferenceMetadataValue(reference, ProjectItemProperties.ExcludeAssets),
+ GetReferenceMetadataValue(reference, ProjectItemProperties.PrivateAssets));
+
+ var dependency = new LibraryDependency()
{
AutoReferenced = MSBuildStringUtility.IsTrue(GetReferenceMetadataValue(reference, ProjectItemProperties.IsImplicitlyDefined)),
GeneratePathProperty = MSBuildStringUtility.IsTrue(GetReferenceMetadataValue(reference, ProjectItemProperties.GeneratePathProperty)),
@@ -216,14 +222,11 @@ private static LibraryDependency ToPackageLibraryDependency(PackageReference ref
name: reference.Name,
versionRange: ToVersionRange(reference.Version, isCpvmEnabled),
typeConstraint: LibraryDependencyTarget.Package),
+ NoWarn = noWarn,
+ IncludeType = includeType,
+ SuppressParent = suppressParent,
};
- MSBuildRestoreUtility.ApplyIncludeFlags(
- dependency,
- GetReferenceMetadataValue(reference, ProjectItemProperties.IncludeAssets),
- GetReferenceMetadataValue(reference, ProjectItemProperties.ExcludeAssets),
- GetReferenceMetadataValue(reference, ProjectItemProperties.PrivateAssets));
-
return dependency;
}
diff --git a/src/NuGet.Clients/NuGet.PackageManagement.VisualStudio/Projects/LegacyPackageReferenceProject.cs b/src/NuGet.Clients/NuGet.PackageManagement.VisualStudio/Projects/LegacyPackageReferenceProject.cs
index 3f0cf54fce3..3961e83d89a 100644
--- a/src/NuGet.Clients/NuGet.PackageManagement.VisualStudio/Projects/LegacyPackageReferenceProject.cs
+++ b/src/NuGet.Clients/NuGet.PackageManagement.VisualStudio/Projects/LegacyPackageReferenceProject.cs
@@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
+using System.Collections.Immutable;
using System.Globalization;
using System.IO;
using System.Linq;
@@ -128,7 +129,7 @@ protected override async Task GetAssetsFilePathAsync(bool shouldThrow)
return (new[] { packageSpec }, null);
}
- private Dictionary GetCentralPackageVersions()
+ private IReadOnlyDictionary GetCentralPackageVersions()
{
ThreadHelper.ThrowIfNotOnUIThread();
@@ -142,7 +143,6 @@ private Dictionary GetCentralPackageVersions()
.ToDictionary(cpv => cpv.Name);
}
-
private CentralPackageVersion ToCentralPackageVersion(string packageId, string version)
{
if (string.IsNullOrEmpty(packageId))
@@ -220,7 +220,7 @@ public override async Task InstallPackageAsync(
BuildIntegratedInstallationContext __,
CancellationToken token)
{
- var dependency = new LibraryDependency(noWarn: Array.Empty())
+ var dependency = new LibraryDependency()
{
LibraryRange = new LibraryRange(
name: packageId,
@@ -423,7 +423,7 @@ private async Task GetPackageSpecAsync(ISettings settings)
var packageReferences = (await ProjectServices
.ReferencesReader
.GetPackageReferencesAsync(targetFramework, CancellationToken.None))
- .ToList();
+ .ToImmutableArray();
#pragma warning disable CS0618 // Type or member is obsolete
// Need to validate no project systems get this property via DTE, and if so, switch to GetPropertyValue
@@ -431,30 +431,36 @@ private async Task GetPackageSpecAsync(ISettings settings)
.Select(NuGetFramework.Parse)
.ToList();
- var assetTargetFallback = MSBuildStringUtility.Split(GetPropertySafe(_vsProjectAdapter.BuildProperties, ProjectBuildProperties.AssetTargetFallback))
+ var assetTargetFallbackList = MSBuildStringUtility.Split(GetPropertySafe(_vsProjectAdapter.BuildProperties, ProjectBuildProperties.AssetTargetFallback))
.Select(NuGetFramework.Parse)
.ToList();
#pragma warning restore CS0618 // Type or member is obsolete
- var projectTfi = new TargetFrameworkInformation
- {
- FrameworkName = targetFramework,
- Dependencies = packageReferences,
- };
-
#pragma warning disable CS0618 // Type or member is obsolete
// Need to validate no project systems get this property via DTE, and if so, switch to GetPropertyValue
bool isCpvmEnabled = MSBuildStringUtility.IsTrue(GetPropertySafe(_vsProjectAdapter.BuildProperties, ProjectBuildProperties.ManagePackageVersionsCentrally));
#pragma warning restore CS0618 // Type or member is obsolete
+
+ IReadOnlyDictionary centralPackageVersions = null;
if (isCpvmEnabled)
{
// Add the central version information and merge the information to the package reference dependencies
- projectTfi.CentralPackageVersions.AddRange(GetCentralPackageVersions());
- LibraryDependency.ApplyCentralVersionInformation(projectTfi.Dependencies, projectTfi.CentralPackageVersions);
+ centralPackageVersions = GetCentralPackageVersions();
+ packageReferences = LibraryDependency.ApplyCentralVersionInformation(packageReferences, centralPackageVersions);
}
- // Apply fallback settings
- AssetTargetFallbackUtility.ApplyFramework(projectTfi, packageTargetFallback, assetTargetFallback);
+ // Get fallback settings
+ (targetFramework, var imports, var assetTargetFallback, var warn) = AssetTargetFallbackUtility.GetFallbackFrameworkInformation(targetFramework, packageTargetFallback, assetTargetFallbackList);
+
+ var projectTfi = new TargetFrameworkInformation
+ {
+ AssetTargetFallback = assetTargetFallback,
+ CentralPackageVersions = centralPackageVersions,
+ Dependencies = packageReferences,
+ Imports = imports,
+ FrameworkName = targetFramework,
+ Warn = warn,
+ };
// Build up runtime information.
diff --git a/src/NuGet.Clients/NuGet.SolutionRestoreManager/VSNominationUtilities.cs b/src/NuGet.Clients/NuGet.SolutionRestoreManager/VSNominationUtilities.cs
index 4485d27d810..fc27e2cc5bf 100644
--- a/src/NuGet.Clients/NuGet.SolutionRestoreManager/VSNominationUtilities.cs
+++ b/src/NuGet.Clients/NuGet.SolutionRestoreManager/VSNominationUtilities.cs
@@ -5,6 +5,7 @@
using System;
using System.Collections.Generic;
+using System.Collections.Immutable;
using System.Globalization;
using System.IO;
using System.Linq;
@@ -92,11 +93,7 @@ internal static RuntimeGraph GetRuntimeGraph(IReadOnlyList? ptf = ptfString is not null
@@ -108,42 +105,56 @@ internal static TargetFrameworkInformation ToTargetFrameworkInformation(
? MSBuildStringUtility.Split(atfString).Select(NuGetFramework.Parse).ToList()
: null;
- // Update TFI with fallback properties
- AssetTargetFallbackUtility.ApplyFramework(tfi, ptf, atf);
+ // Get fallback properties
+ (frameworkName, var imports, var assetTargetFallback, var warn) = AssetTargetFallbackUtility.GetFallbackFrameworkInformation(frameworkName, ptf, atf);
- tfi.RuntimeIdentifierGraphPath = GetPropertyValueOrNull(targetFrameworkInfo.Properties, ProjectBuildProperties.RuntimeIdentifierGraphPath);
+ ImmutableArray dependencies = [];
+ ImmutableArray downloadDependencies = [];
+ IReadOnlyDictionary? centralPackageVersions = null;
+ IReadOnlyCollection? frameworkReferences = null;
- if (targetFrameworkInfo.Items is null)
+ if (targetFrameworkInfo.Items is not null)
{
- return tfi;
- }
+ if (targetFrameworkInfo.Items.TryGetValue(ProjectItems.PackageReference, out var packageReferences))
+ {
+ dependencies = packageReferences.Select(pr => ToPackageLibraryDependency(pr, cpvmEnabled)).ToImmutableArray();
+ }
- if (targetFrameworkInfo.Items.TryGetValue(ProjectItems.PackageReference, out var packageReferences))
- {
- tfi.Dependencies.AddRange(packageReferences.Select(pr => ToPackageLibraryDependency(pr, cpvmEnabled)));
- }
+ if (targetFrameworkInfo.Items.TryGetValue("PackageDownload", out var packageDownloads))
+ {
+ downloadDependencies = packageDownloads.SelectMany(ToPackageDownloadDependency).ToImmutableArray();
+ }
- if (targetFrameworkInfo.Items.TryGetValue("PackageDownload", out var packageDownloads))
- {
- tfi.DownloadDependencies.AddRange(packageDownloads.SelectMany(ToPackageDownloadDependency));
- }
+ if (cpvmEnabled && targetFrameworkInfo.Items.TryGetValue("PackageVersion", out var packageVersions))
+ {
+ centralPackageVersions = packageVersions
+ .Select(ToCentralPackageVersion)
+ .Distinct(CentralPackageVersionNameComparer.Default)
+ .ToDictionary(cpv => cpv.Name);
- if (cpvmEnabled && targetFrameworkInfo.Items.TryGetValue("PackageVersion", out var centralPackageVersions))
- {
- tfi.CentralPackageVersions.AddRange(
- centralPackageVersions
- .Select(ToCentralPackageVersion)
- .Distinct(CentralPackageVersionNameComparer.Default)
- .ToDictionary(cpv => cpv.Name));
-
- // Merge the central version information to the package information
- LibraryDependency.ApplyCentralVersionInformation(tfi.Dependencies, tfi.CentralPackageVersions);
+ // Merge the central version information to the package information
+ dependencies = LibraryDependency.ApplyCentralVersionInformation(dependencies, centralPackageVersions);
+ }
+
+ if (targetFrameworkInfo.Items.TryGetValue("FrameworkReference", out var frameworkReference))
+ {
+ frameworkReferences = PopulateFrameworkDependencies(frameworkReference);
+ }
}
- if (targetFrameworkInfo.Items.TryGetValue("FrameworkReference", out var frameworkReferences))
+ var tfi = new TargetFrameworkInformation
{
- PopulateFrameworkDependencies(tfi, frameworkReferences);
- }
+ AssetTargetFallback = assetTargetFallback,
+ CentralPackageVersions = centralPackageVersions,
+ Dependencies = dependencies,
+ DownloadDependencies = downloadDependencies,
+ FrameworkName = frameworkName,
+ FrameworkReferences = frameworkReferences,
+ Imports = imports,
+ RuntimeIdentifierGraphPath = GetPropertyValueOrNull(targetFrameworkInfo.Properties, ProjectBuildProperties.RuntimeIdentifierGraphPath),
+ TargetAlias = GetPropertyValueOrNull(targetFrameworkInfo.Properties, ProjectBuildProperties.TargetFramework),
+ Warn = warn
+ };
return tfi;
}
@@ -219,11 +230,15 @@ internal static RestoreLockProperties GetRestoreLockProperties(IReadOnlyList targetFrameworks)
{
+ var warningsAsErrors = GetSingleOrDefaultNuGetLogCodes(targetFrameworks, ProjectBuildProperties.WarningsAsErrors, MSBuildStringUtility.GetNuGetLogCodes);
+ var noWarn = GetSingleOrDefaultNuGetLogCodes(targetFrameworks, ProjectBuildProperties.NoWarn, MSBuildStringUtility.GetNuGetLogCodes);
+ var warningsNotAsErrors = GetSingleOrDefaultNuGetLogCodes(targetFrameworks, ProjectBuildProperties.WarningsNotAsErrors, MSBuildStringUtility.GetNuGetLogCodes);
+
return WarningProperties.GetWarningProperties(
treatWarningsAsErrors: GetSingleOrDefaultPropertyValue(targetFrameworks, ProjectBuildProperties.TreatWarningsAsErrors, e => e),
- warningsAsErrors: GetSingleOrDefaultNuGetLogCodes(targetFrameworks, ProjectBuildProperties.WarningsAsErrors, MSBuildStringUtility.GetNuGetLogCodes),
- noWarn: GetSingleOrDefaultNuGetLogCodes(targetFrameworks, ProjectBuildProperties.NoWarn, MSBuildStringUtility.GetNuGetLogCodes),
- warningsNotAsErrors: GetSingleOrDefaultNuGetLogCodes(targetFrameworks, ProjectBuildProperties.WarningsNotAsErrors, MSBuildStringUtility.GetNuGetLogCodes));
+ warningsAsErrors: warningsAsErrors.IsDefault ? [] : warningsAsErrors,
+ noWarn: noWarn.IsDefault ? [] : noWarn,
+ warningsNotAsErrors: warningsNotAsErrors.IsDefault ? [] : warningsNotAsErrors);
}
///
@@ -411,18 +426,18 @@ private static NuGetFramework GetToolFramework(IReadOnlyList 1 ? default(TValue) : properties.SingleOrDefault();
}
- private static IEnumerable GetSingleOrDefaultNuGetLogCodes(
+ private static ImmutableArray GetSingleOrDefaultNuGetLogCodes(
IReadOnlyList values,
string propertyName,
- Func> valueFactory)
+ Func> valueFactory)
{
var logCodeProperties = GetNonEvaluatedPropertyOrNull(values, propertyName, valueFactory);
- return logCodeProperties is not null ? MSBuildStringUtility.GetDistinctNuGetLogCodesOrDefault(logCodeProperties) : Enumerable.Empty();
+ return MSBuildStringUtility.GetDistinctNuGetLogCodesOrDefault(logCodeProperties);
}
// Trying to fetch a list of property value from all tfm property bags.
- private static IEnumerable GetNonEvaluatedPropertyOrNull(
+ private static ImmutableArray GetNonEvaluatedPropertyOrNull(
IReadOnlyList values,
string propertyName,
Func valueFactory)
@@ -433,7 +448,8 @@ private static IEnumerable GetSingleOrDefaultNuGetLogCodes(
var val = tfm.Properties is not null ? GetPropertyValueOrNull(tfm.Properties, propertyName) : null;
return val != null ? valueFactory(val) : default(TValue);
})
- .Distinct();
+ .Distinct()
+ .ToImmutableArray();
}
// Trying to fetch a property value from tfm property bags.
@@ -494,9 +510,14 @@ private static LibraryDependency ToPackageLibraryDependency(IVsReferenceItem2 it
// Get warning suppressions
string? noWarnString = GetPropertyValueOrNull(item, ProjectBuildProperties.NoWarn);
- IList noWarn = noWarnString is not null ? MSBuildStringUtility.GetNuGetLogCodes(noWarnString) : Array.Empty();
+ ImmutableArray noWarn = noWarnString is not null ? MSBuildStringUtility.GetNuGetLogCodes(noWarnString) : [];
- var dependency = new LibraryDependency(noWarn)
+ (var includeType, var suppressParent) = MSBuildRestoreUtility.GetLibraryDependencyIncludeFlags(
+ includeAssets: GetPropertyValueOrNull(item, ProjectBuildProperties.IncludeAssets),
+ excludeAssets: GetPropertyValueOrNull(item, ProjectBuildProperties.ExcludeAssets),
+ privateAssets: GetPropertyValueOrNull(item, ProjectBuildProperties.PrivateAssets));
+
+ var dependency = new LibraryDependency()
{
LibraryRange = new LibraryRange(
name: item.Name,
@@ -507,15 +528,12 @@ private static LibraryDependency ToPackageLibraryDependency(IVsReferenceItem2 it
AutoReferenced = GetPropertyBoolOrFalse(item, "IsImplicitlyDefined"),
GeneratePathProperty = GetPropertyBoolOrFalse(item, "GeneratePathProperty"),
Aliases = GetPropertyValueOrNull(item, "Aliases"),
- VersionOverride = versionOverrideRange
+ VersionOverride = versionOverrideRange,
+ NoWarn = noWarn,
+ IncludeType = includeType,
+ SuppressParent = suppressParent,
};
- MSBuildRestoreUtility.ApplyIncludeFlags(
- dependency,
- includeAssets: GetPropertyValueOrNull(item, ProjectBuildProperties.IncludeAssets),
- excludeAssets: GetPropertyValueOrNull(item, ProjectBuildProperties.ExcludeAssets),
- privateAssets: GetPropertyValueOrNull(item, ProjectBuildProperties.PrivateAssets));
-
return dependency;
}
@@ -545,15 +563,19 @@ private static CentralPackageVersion ToCentralPackageVersion(IVsReferenceItem2 i
return centralPackageVersion;
}
- private static void PopulateFrameworkDependencies(TargetFrameworkInformation tfi, IReadOnlyList frameworkReferences)
+ private static IReadOnlyCollection? PopulateFrameworkDependencies(IReadOnlyList frameworkReferences)
{
+ HashSet? newReferences = null;
foreach (var item in frameworkReferences)
{
- if (!tfi.FrameworkReferences.Any(e => ComparisonUtility.FrameworkReferenceNameComparer.Equals(e.Name, item.Name)))
+ newReferences ??= new HashSet();
+ if (!newReferences.Any(e => ComparisonUtility.FrameworkReferenceNameComparer.Equals(e.Name, item.Name)))
{
- tfi.FrameworkReferences.Add(ToFrameworkDependency(item));
+ newReferences.Add(ToFrameworkDependency(item));
}
}
+
+ return newReferences;
}
private static FrameworkDependency ToFrameworkDependency(IVsReferenceItem2 item)
diff --git a/src/NuGet.Core/Microsoft.Build.NuGetSdkResolver/RestoreRunnerEx.cs b/src/NuGet.Core/Microsoft.Build.NuGetSdkResolver/RestoreRunnerEx.cs
index 11f462c0dfa..25f5f4a73af 100644
--- a/src/NuGet.Core/Microsoft.Build.NuGetSdkResolver/RestoreRunnerEx.cs
+++ b/src/NuGet.Core/Microsoft.Build.NuGetSdkResolver/RestoreRunnerEx.cs
@@ -69,7 +69,7 @@ public static Task> RunWithoutCommit(LibraryIde
{
Dependencies = new List
{
- new LibraryDependency(noWarn: Array.Empty())
+ new LibraryDependency()
{
LibraryRange = new LibraryRange(
libraryIdentity.Name,
diff --git a/src/NuGet.Core/NuGet.Build.Tasks.Console/MSBuildStaticGraphRestore.cs b/src/NuGet.Core/NuGet.Build.Tasks.Console/MSBuildStaticGraphRestore.cs
index 3dccf59d12d..a4d3f6599d9 100644
--- a/src/NuGet.Core/NuGet.Build.Tasks.Console/MSBuildStaticGraphRestore.cs
+++ b/src/NuGet.Core/NuGet.Build.Tasks.Console/MSBuildStaticGraphRestore.cs
@@ -4,11 +4,13 @@
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
+using System.Collections.Immutable;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Build.Construction;
@@ -211,20 +213,26 @@ public bool WriteDependencyGraphSpec(string entryProjectFilePath, IDictionary
/// The to get framework references for.
/// A containing the framework references for the specified project.
- internal static List GetFrameworkReferences(IMSBuildProject project)
+ internal static IReadOnlyCollection GetFrameworkReferences(IMSBuildProject project)
{
// Get the unique FrameworkReference items, ignoring duplicates
List frameworkReferenceItems = GetDistinctItemsOrEmpty(project, "FrameworkReference").ToList();
+ if (frameworkReferenceItems.Count == 0)
+ {
+ return null;
+ }
+
// For best performance, its better to create a list with the exact number of items needed rather than using a LINQ statement or AddRange. This is because if the list
// is not allocated with enough items, the list has to be grown which can slow things down
- var frameworkDependencies = new List(frameworkReferenceItems.Count);
+ var frameworkDependencies = new FrameworkDependency[frameworkReferenceItems.Count];
- foreach (var frameworkReferenceItem in frameworkReferenceItems)
+ for (int i = 0; i < frameworkReferenceItems.Count; i++)
{
+ var frameworkReferenceItem = frameworkReferenceItems[i];
var privateAssets = MSBuildStringUtility.Split(frameworkReferenceItem.GetProperty("PrivateAssets"));
- frameworkDependencies.Add(new FrameworkDependency(frameworkReferenceItem.Identity, FrameworkDependencyFlagsUtils.GetFlags(privateAssets)));
+ frameworkDependencies[i] = new FrameworkDependency(frameworkReferenceItem.Identity, FrameworkDependencyFlagsUtils.GetFlags(privateAssets));
}
return frameworkDependencies;
@@ -292,22 +300,23 @@ internal static Dictionary GetCentralPackageVersi
/// The to get package references for.
/// A flag for central package version management being enabled.
/// A containing the package references for the specified project.
- internal static List GetPackageReferences(IMSBuildProject project, bool isCentralPackageVersionManagementEnabled)
+ internal static ImmutableArray GetPackageReferences(IMSBuildProject project, bool isCentralPackageVersionManagementEnabled)
{
// Get the distinct PackageReference items, ignoring duplicates
List packageReferenceItems = GetDistinctItemsOrEmpty(project, "PackageReference").ToList();
- var libraryDependencies = new List(packageReferenceItems.Count);
+ var libraryDependencies = new LibraryDependency[packageReferenceItems.Count];
- foreach (var packageReferenceItem in packageReferenceItems)
+ for (int i = 0; i < packageReferenceItems.Count; i++)
{
+ var packageReferenceItem = packageReferenceItems[i];
string version = packageReferenceItem.GetProperty("Version");
string versionOverride = packageReferenceItem.GetProperty("VersionOverride");
- IList noWarn = MSBuildStringUtility.GetNuGetLogCodes(packageReferenceItem.GetProperty("NoWarn"));
+ ImmutableArray noWarn = MSBuildStringUtility.GetNuGetLogCodes(packageReferenceItem.GetProperty("NoWarn"));
- libraryDependencies.Add(new LibraryDependency(noWarn)
+ libraryDependencies[i] = new LibraryDependency()
{
AutoReferenced = packageReferenceItem.IsPropertyTrue("IsImplicitlyDefined"),
GeneratePathProperty = packageReferenceItem.IsPropertyTrue("GeneratePathProperty"),
@@ -319,10 +328,11 @@ internal static List GetPackageReferences(IMSBuildProject pro
LibraryDependencyTarget.Package),
SuppressParent = GetLibraryIncludeFlags(packageReferenceItem.GetProperty("PrivateAssets"), LibraryIncludeFlagUtils.DefaultSuppressParent),
VersionOverride = string.IsNullOrWhiteSpace(versionOverride) ? null : VersionRange.Parse(versionOverride),
- });
+ NoWarn = noWarn,
+ };
}
- return libraryDependencies;
+ return ImmutableCollectionsMarshal.AsImmutableArray(libraryDependencies);
}
///
@@ -637,33 +647,37 @@ internal static List GetTargetFrameworkInfos(IReadOn
clrSupport: msBuildProjectInstance.GetProperty("CLRSupport"),
windowsTargetPlatformMinVersion: msBuildProjectInstance.GetProperty("WindowsTargetPlatformMinVersion"));
- var targetFrameworkInformation = new TargetFrameworkInformation()
- {
- FrameworkName = targetFramework,
- TargetAlias = targetAlias,
- RuntimeIdentifierGraphPath = msBuildProjectInstance.GetProperty(nameof(TargetFrameworkInformation.RuntimeIdentifierGraphPath))
- };
-
var packageTargetFallback = MSBuildStringUtility.Split(msBuildProjectInstance.GetProperty("PackageTargetFallback")).Select(NuGetFramework.Parse).ToList();
- var assetTargetFallback = MSBuildStringUtility.Split(msBuildProjectInstance.GetProperty(nameof(TargetFrameworkInformation.AssetTargetFallback))).Select(NuGetFramework.Parse).ToList();
-
- AssetTargetFallbackUtility.EnsureValidFallback(packageTargetFallback, assetTargetFallback, msBuildProjectInstance.FullPath);
-
- AssetTargetFallbackUtility.ApplyFramework(targetFrameworkInformation, packageTargetFallback, assetTargetFallback);
+ var assetTargetFallbackEnum = MSBuildStringUtility.Split(msBuildProjectInstance.GetProperty(nameof(TargetFrameworkInformation.AssetTargetFallback))).Select(NuGetFramework.Parse).ToList();
- targetFrameworkInformation.Dependencies.AddRange(GetPackageReferences(msBuildProjectInstance, isCpvmEnabled));
+ AssetTargetFallbackUtility.EnsureValidFallback(packageTargetFallback, assetTargetFallbackEnum, msBuildProjectInstance.FullPath);
- targetFrameworkInformation.DownloadDependencies.AddRange(GetPackageDownloads(msBuildProjectInstance));
-
- targetFrameworkInformation.FrameworkReferences.AddRange(GetFrameworkReferences(msBuildProjectInstance));
+ (targetFramework, ImmutableArray imports, bool assetTargetFallback, bool warn) = AssetTargetFallbackUtility.GetFallbackFrameworkInformation(targetFramework, packageTargetFallback, assetTargetFallbackEnum);
+ var dependencies = GetPackageReferences(msBuildProjectInstance, isCpvmEnabled);
+ IReadOnlyDictionary centralPackageVersions = null;
if (isCpvmEnabled)
{
- targetFrameworkInformation.CentralPackageVersions.AddRange(GetCentralPackageVersions(msBuildProjectInstance));
- LibraryDependency.ApplyCentralVersionInformation(targetFrameworkInformation.Dependencies, targetFrameworkInformation.CentralPackageVersions);
+ centralPackageVersions = GetCentralPackageVersions(msBuildProjectInstance);
+
+ dependencies = LibraryDependency.ApplyCentralVersionInformation(dependencies, centralPackageVersions);
}
+ var targetFrameworkInformation = new TargetFrameworkInformation()
+ {
+ AssetTargetFallback = assetTargetFallback,
+ CentralPackageVersions = centralPackageVersions,
+ Dependencies = dependencies,
+ DownloadDependencies = GetPackageDownloads(msBuildProjectInstance).ToImmutableArray(),
+ FrameworkName = targetFramework,
+ Imports = imports,
+ FrameworkReferences = GetFrameworkReferences(msBuildProjectInstance),
+ RuntimeIdentifierGraphPath = msBuildProjectInstance.GetProperty(nameof(TargetFrameworkInformation.RuntimeIdentifierGraphPath)),
+ TargetAlias = targetAlias,
+ Warn = warn
+ };
+
targetFrameworkInfos.Add(targetFrameworkInformation);
}
diff --git a/src/NuGet.Core/NuGet.Build.Tasks.Pack/PackTaskLogic.cs b/src/NuGet.Core/NuGet.Build.Tasks.Pack/PackTaskLogic.cs
index 8dd7eb6e67f..b2783087e84 100644
--- a/src/NuGet.Core/NuGet.Build.Tasks.Pack/PackTaskLogic.cs
+++ b/src/NuGet.Core/NuGet.Build.Tasks.Pack/PackTaskLogic.cs
@@ -3,9 +3,11 @@
using System;
using System.Collections.Generic;
+using System.Collections.Immutable;
using System.Globalization;
using System.IO;
using System.Linq;
+using System.Runtime.InteropServices;
using NuGet.Commands;
using NuGet.Common;
using NuGet.Frameworks;
@@ -889,7 +891,7 @@ private static void InitializeProjectDependencies(
// https://github.com/NuGet/Home/issues/3891
//
// For now, assume the project reference is a package dependency.
- var projectDependency = new LibraryDependency(noWarn: Array.Empty())
+ var projectDependency = new LibraryDependency()
{
LibraryRange = new LibraryRange(
targetLibrary.Name,
@@ -910,85 +912,143 @@ private void InitializePackageDependencies(
ISet frameworkWithSuppressedDependencies)
{
var packageSpecificNoWarnProperties = new Dictionary>(StringComparer.OrdinalIgnoreCase);
+ var frameworks = assetsFile.PackageSpec.TargetFrameworks;
// From the package spec, we know the direct package dependencies of this project.
- foreach (TargetFrameworkInformation framework in assetsFile.PackageSpec.TargetFrameworks)
+ for (var i = 0; i < frameworks.Count; i++)
{
+ var framework = frameworks[i];
+
if (frameworkWithSuppressedDependencies.Contains(framework.FrameworkName))
{
continue;
}
- IEnumerable centralTransitiveDependencies = assetsFile
- .CentralTransitiveDependencyGroups
- .Where(centralTDG => centralTDG.FrameworkName.Equals(framework.FrameworkName.ToString(), StringComparison.OrdinalIgnoreCase))
- .SelectMany(centralTDG => centralTDG.TransitiveDependencies);
-
- // First, add each of the generic package dependencies to the framework-specific list.
- var packageDependencies = assetsFile
- .PackageSpec
- .Dependencies
- .Concat(framework.Dependencies)
- .Concat(centralTransitiveDependencies);
+ // First, add each of the generic package dependencies
+ AddDependencies(assetsFile.PackageSpec.Dependencies, dependenciesByFramework, framework, assetsFile, packageSpecificNoWarnProperties);
- HashSet dependencies;
- if (!dependenciesByFramework.TryGetValue(framework.FrameworkName, out dependencies))
- {
- dependencies = new HashSet();
- dependenciesByFramework[framework.FrameworkName] = dependencies;
- }
+ // Next, the framework-specific dependencies
+ var newFrameworkDependencies = AddDependencies(framework.Dependencies, dependenciesByFramework, framework, assetsFile, packageSpecificNoWarnProperties);
+ framework = new TargetFrameworkInformation(framework) { Dependencies = newFrameworkDependencies };
- // Add each package dependency.
- foreach (var packageDependency in packageDependencies)
+ // Next, the central transitive dependencies
+ foreach (var centralTDG in assetsFile.CentralTransitiveDependencyGroups)
{
- // If we have a floating package dependency like 1.2.3-xyz-*, we
- // use the version of the package that restore resolved it to.
- if (packageDependency.LibraryRange.VersionRange.IsFloating)
+ if (centralTDG.FrameworkName.Equals(framework.FrameworkName.ToString(), StringComparison.OrdinalIgnoreCase))
{
- var lockFileTarget = assetsFile.GetTarget(framework.FrameworkName, runtimeIdentifier: null);
- var package = lockFileTarget.Libraries.First(
- library =>
- string.Equals(library.Name, packageDependency.Name, StringComparison.OrdinalIgnoreCase));
- if (package != null)
- {
- if (packageDependency.LibraryRange.VersionRange.HasUpperBound)
- {
- packageDependency.LibraryRange.VersionRange = new VersionRange(
- minVersion: package.Version,
- includeMinVersion: packageDependency.LibraryRange.VersionRange.IsMinInclusive,
- maxVersion: packageDependency.LibraryRange.VersionRange.MaxVersion,
- includeMaxVersion: packageDependency.LibraryRange.VersionRange.IsMaxInclusive);
- }
- else
- {
- packageDependency.LibraryRange.VersionRange = new VersionRange(
- minVersion: package.Version,
- includeMinVersion: packageDependency.LibraryRange.VersionRange.IsMinInclusive);
- }
- }
+ AddDependencies(centralTDG.TransitiveDependencies, dependenciesByFramework, framework, assetsFile, packageSpecificNoWarnProperties);
}
+ }
- if (packageDependency.NoWarn.Count > 0)
- {
- HashSet<(NuGetLogCode, NuGetFramework)> nowarnProperties = null;
+ frameworks[i] = framework;
+ }
- if (!packageSpecificNoWarnProperties.TryGetValue(packageDependency.Name, out nowarnProperties))
- {
- nowarnProperties = new HashSet<(NuGetLogCode, NuGetFramework)>();
- }
+ if (packageSpecificNoWarnProperties.Keys.Count > 0)
+ {
+ _packageSpecificWarningProperties = PackageSpecificWarningProperties.CreatePackageSpecificWarningProperties(packageSpecificNoWarnProperties);
+ }
+ }
- nowarnProperties.AddRange(packageDependency.NoWarn.Select(n => (n, framework.FrameworkName)));
- packageSpecificNoWarnProperties[packageDependency.Name] = nowarnProperties;
- }
+ private static void AddDependencies(
+ IList packageDependencies,
+ Dictionary> dependenciesByFramework,
+ TargetFrameworkInformation framework,
+ LockFile assetsFile,
+ Dictionary> packageSpecificNoWarnProperties)
+ {
+ HashSet dependencies;
+ if (!dependenciesByFramework.TryGetValue(framework.FrameworkName, out dependencies))
+ {
+ dependencies = new HashSet();
+ dependenciesByFramework[framework.FrameworkName] = dependencies;
+ }
+
+ // Add each package dependency.
+ for (int i = 0; i < packageDependencies.Count; i++)
+ {
+ var updatedPackageDependency = GetUpdatedPackageDependency(packageDependencies[i], assetsFile, framework, packageSpecificNoWarnProperties, dependencies);
+ packageDependencies[i] = updatedPackageDependency;
+ }
+ }
- PackCommandRunner.AddLibraryDependency(packageDependency, dependencies);
+ private static ImmutableArray AddDependencies(
+ ImmutableArray packageDependencies,
+ Dictionary> dependenciesByFramework,
+ TargetFrameworkInformation framework,
+ LockFile assetsFile,
+ Dictionary> packageSpecificNoWarnProperties)
+ {
+ HashSet dependencies;
+ if (!dependenciesByFramework.TryGetValue(framework.FrameworkName, out dependencies))
+ {
+ dependencies = new HashSet();
+ dependenciesByFramework[framework.FrameworkName] = dependencies;
+ }
+
+ LibraryDependency[] updatedDependencies = new LibraryDependency[packageDependencies.Length];
+
+ // Add each package dependency.
+ for (var i = 0; i < packageDependencies.Length; i++)
+ {
+ var updatedPackageDependency = GetUpdatedPackageDependency(packageDependencies[i], assetsFile, framework, packageSpecificNoWarnProperties, dependencies);
+ updatedDependencies[i] = updatedPackageDependency;
+ }
+
+ return ImmutableCollectionsMarshal.AsImmutableArray(updatedDependencies);
+ }
+
+ private static LibraryDependency GetUpdatedPackageDependency(
+ LibraryDependency packageDependency,
+ LockFile assetsFile,
+ TargetFrameworkInformation framework,
+ Dictionary> packageSpecificNoWarnProperties,
+ HashSet dependencies)
+ {
+ // If we have a floating package dependency like 1.2.3-xyz-*, we
+ // use the version of the package that restore resolved it to.
+ if (packageDependency.LibraryRange.VersionRange.IsFloating)
+ {
+ var lockFileTarget = assetsFile.GetTarget(framework.FrameworkName, runtimeIdentifier: null);
+ var package = lockFileTarget.Libraries.First(
+ library =>
+ string.Equals(library.Name, packageDependency.Name, StringComparison.OrdinalIgnoreCase));
+
+ VersionRange versionRange;
+ if (packageDependency.LibraryRange.VersionRange.HasUpperBound)
+ {
+ versionRange = new VersionRange(
+ minVersion: package.Version,
+ includeMinVersion: packageDependency.LibraryRange.VersionRange.IsMinInclusive,
+ maxVersion: packageDependency.LibraryRange.VersionRange.MaxVersion,
+ includeMaxVersion: packageDependency.LibraryRange.VersionRange.IsMaxInclusive);
}
+ else
+ {
+ versionRange = new VersionRange(
+ minVersion: package.Version,
+ includeMinVersion: packageDependency.LibraryRange.VersionRange.IsMinInclusive);
+ }
+
+ var libraryRange = new LibraryRange(packageDependency.LibraryRange) { VersionRange = versionRange };
+ packageDependency = new LibraryDependency(packageDependency) { LibraryRange = libraryRange };
}
- if (packageSpecificNoWarnProperties.Keys.Count > 0)
+ if (packageDependency.NoWarn.Length > 0)
{
- _packageSpecificWarningProperties = PackageSpecificWarningProperties.CreatePackageSpecificWarningProperties(packageSpecificNoWarnProperties);
+ HashSet<(NuGetLogCode, NuGetFramework)> nowarnProperties = null;
+
+ if (!packageSpecificNoWarnProperties.TryGetValue(packageDependency.Name, out nowarnProperties))
+ {
+ nowarnProperties = new HashSet<(NuGetLogCode, NuGetFramework)>();
+ }
+
+ nowarnProperties.AddRange(packageDependency.NoWarn.Select(n => (n, framework.FrameworkName)));
+ packageSpecificNoWarnProperties[packageDependency.Name] = nowarnProperties;
}
+
+ PackCommandRunner.AddLibraryDependency(packageDependency, dependencies);
+
+ return packageDependency;
}
private static IDictionary ParsePropertiesAsDictionary(string[] properties)
diff --git a/src/NuGet.Core/NuGet.CommandLine.XPlat/Commands/PackageReferenceCommands/AddPackageReferenceCommandRunner.cs b/src/NuGet.Core/NuGet.CommandLine.XPlat/Commands/PackageReferenceCommands/AddPackageReferenceCommandRunner.cs
index 347e1ff3e24..894795fa2ee 100644
--- a/src/NuGet.Core/NuGet.CommandLine.XPlat/Commands/PackageReferenceCommands/AddPackageReferenceCommandRunner.cs
+++ b/src/NuGet.Core/NuGet.CommandLine.XPlat/Commands/PackageReferenceCommands/AddPackageReferenceCommandRunner.cs
@@ -19,6 +19,7 @@
using NuGet.Packaging.Core;
using NuGet.ProjectModel;
using NuGet.Protocol.Core.Types;
+using NuGet.Shared;
using NuGet.Versioning;
namespace NuGet.CommandLine.XPlat
@@ -49,7 +50,7 @@ public async Task ExecuteCommand(PackageReferenceArgs packageReferenceArgs,
versionRange = VersionRange.Parse(packageReferenceArgs.PackageVersion);
}
- var libraryDependency = new LibraryDependency(noWarn: Array.Empty())
+ var libraryDependency = new LibraryDependency()
{
LibraryRange = new LibraryRange(
name: packageReferenceArgs.PackageId,
@@ -320,31 +321,41 @@ private static LibraryDependency GenerateLibraryDependency(
if (developmentDependency)
{
- foreach (var frameworkInfo in project.TargetFrameworks
- .OrderBy(framework => framework.FrameworkName.ToString(),
- StringComparer.Ordinal))
+ var orderedFrameworksWithOriginalIndex = project.TargetFrameworks
+ .Select((frameworkInfo, originalIndex) => (frameworkInfo, originalIndex))
+ .OrderBy(tuple => tuple.frameworkInfo.FrameworkName.ToString(), StringComparer.Ordinal);
+
+ foreach (var (frameworkInfo, originalIndex) in orderedFrameworksWithOriginalIndex)
{
- var dependency = frameworkInfo.Dependencies.First(
- dep => dep.Name.Equals(packageReferenceArgs.PackageId, StringComparison.OrdinalIgnoreCase));
+ var index = frameworkInfo.Dependencies.FirstIndex(dep => dep.Name.Equals(packageReferenceArgs.PackageId, StringComparison.OrdinalIgnoreCase));
+ var dependency = frameworkInfo.Dependencies[index];
+ var includeType = dependency.IncludeType;
+ var suppressParent = dependency.SuppressParent;
// if suppressParent and IncludeType aren't set by user, then only update those as per dev dependency
- if (dependency?.SuppressParent == LibraryIncludeFlagUtils.DefaultSuppressParent &&
- dependency?.IncludeType == LibraryIncludeFlags.All)
+ if (suppressParent == LibraryIncludeFlagUtils.DefaultSuppressParent &&
+ includeType == LibraryIncludeFlags.All)
{
- dependency.SuppressParent = LibraryIncludeFlags.All;
- dependency.IncludeType = LibraryIncludeFlags.All & ~LibraryIncludeFlags.Compile;
+ suppressParent = LibraryIncludeFlags.All;
+ includeType = LibraryIncludeFlags.All & ~LibraryIncludeFlags.Compile;
}
- if (dependency != null)
+ dependency = new LibraryDependency(dependency)
{
- dependency.LibraryRange.VersionRange = version;
- dependency.VersionCentrallyManaged = isCentralPackageManagementEnabled;
- return dependency;
- }
+ IncludeType = includeType,
+ LibraryRange = new LibraryRange(dependency.LibraryRange) { VersionRange = version },
+ SuppressParent = suppressParent,
+ VersionCentrallyManaged = isCentralPackageManagementEnabled,
+ };
+
+ var newDependencies = frameworkInfo.Dependencies.SetItem(index, dependency);
+ project.TargetFrameworks[originalIndex] = new TargetFrameworkInformation(frameworkInfo) { Dependencies = newDependencies };
+
+ return dependency;
}
}
- return new LibraryDependency(noWarn: Array.Empty())
+ return new LibraryDependency()
{
LibraryRange = new LibraryRange(
name: packageReferenceArgs.PackageId,
diff --git a/src/NuGet.Core/NuGet.CommandLine.XPlat/Commands/PackageReferenceCommands/RemovePackageReferenceCommandRunner.cs b/src/NuGet.Core/NuGet.CommandLine.XPlat/Commands/PackageReferenceCommands/RemovePackageReferenceCommandRunner.cs
index a6056449bf4..079ec18892d 100644
--- a/src/NuGet.Core/NuGet.CommandLine.XPlat/Commands/PackageReferenceCommands/RemovePackageReferenceCommandRunner.cs
+++ b/src/NuGet.Core/NuGet.CommandLine.XPlat/Commands/PackageReferenceCommands/RemovePackageReferenceCommandRunner.cs
@@ -1,10 +1,8 @@
// 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 System.Globalization;
using System.Threading.Tasks;
-using NuGet.Common;
using NuGet.Credentials;
using NuGet.LibraryModel;
using NuGet.Versioning;
@@ -23,7 +21,7 @@ public Task ExecuteCommand(PackageReferenceArgs packageReferenceArgs, MSBui
//Setup the Credential Service - This allows the msbuild sdk resolver to auth if needed.
DefaultCredentialServiceUtility.SetupDefaultCredentialService(packageReferenceArgs.Logger, !packageReferenceArgs.Interactive);
- var libraryDependency = new LibraryDependency(noWarn: Array.Empty())
+ var libraryDependency = new LibraryDependency()
{
LibraryRange = new LibraryRange(
name: packageReferenceArgs.PackageId,
diff --git a/src/NuGet.Core/NuGet.CommandLine.XPlat/NuGet.CommandLine.XPlat.csproj b/src/NuGet.Core/NuGet.CommandLine.XPlat/NuGet.CommandLine.XPlat.csproj
index 8cb88f94ec5..35bccec8c6d 100644
--- a/src/NuGet.Core/NuGet.CommandLine.XPlat/NuGet.CommandLine.XPlat.csproj
+++ b/src/NuGet.Core/NuGet.CommandLine.XPlat/NuGet.CommandLine.XPlat.csproj
@@ -54,6 +54,7 @@
+
diff --git a/src/NuGet.Core/NuGet.Commands/CommandRunners/PackCommandRunner.cs b/src/NuGet.Core/NuGet.Commands/CommandRunners/PackCommandRunner.cs
index 91f4dd14300..9cdb2be425f 100644
--- a/src/NuGet.Core/NuGet.Commands/CommandRunners/PackCommandRunner.cs
+++ b/src/NuGet.Core/NuGet.Commands/CommandRunners/PackCommandRunner.cs
@@ -1252,7 +1252,7 @@ public static void AddLibraryDependency(LibraryDependency dependency, ISet())
+ list.Add(new LibraryDependency()
{
LibraryRange = new LibraryRange(matchingDependency.Name, newVersionRange, LibraryDependencyTarget.All),
IncludeType = dependency.IncludeType & matchingDependency.IncludeType,
diff --git a/src/NuGet.Core/NuGet.Commands/GlobalSuppressions.cs b/src/NuGet.Core/NuGet.Commands/GlobalSuppressions.cs
index 8fc31cbf261..8e4ae3146ec 100644
--- a/src/NuGet.Core/NuGet.Commands/GlobalSuppressions.cs
+++ b/src/NuGet.Core/NuGet.Commands/GlobalSuppressions.cs
@@ -34,7 +34,6 @@
[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'void MatcherExtensions.AddIncludePatterns(Matcher matcher, params IEnumerable[] includePatternsGroups)', validate parameter 'matcher' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:Microsoft.Extensions.FileSystemGlobbing.MatcherExtensions.AddIncludePatterns(Microsoft.Extensions.FileSystemGlobbing.Matcher,System.Collections.Generic.IEnumerable{System.String}[])")]
[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'IEnumerable MatcherExtensions.GetResultsInFullPath(Matcher matcher, string directoryPath)', validate parameter 'matcher' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:Microsoft.Extensions.FileSystemGlobbing.MatcherExtensions.GetResultsInFullPath(Microsoft.Extensions.FileSystemGlobbing.Matcher,System.String)~System.Collections.Generic.IEnumerable{System.String}")]
[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'void AddSourceRunner.Run(AddSourceArgs args, Func getLogger)', validate parameter 'args' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:NuGet.Commands.AddSourceRunner.Run(NuGet.Commands.AddSourceArgs,System.Func{NuGet.Common.ILogger})")]
-[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'void AssetTargetFallbackUtility.ApplyFramework(TargetFrameworkInformation targetFrameworkInfo, IEnumerable packageTargetFallback, IEnumerable assetTargetFallback)', validate parameter 'targetFrameworkInfo' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:NuGet.Commands.AssetTargetFallbackUtility.ApplyFramework(NuGet.ProjectModel.TargetFrameworkInformation,System.Collections.Generic.IEnumerable{NuGet.Frameworks.NuGetFramework},System.Collections.Generic.IEnumerable{NuGet.Frameworks.NuGetFramework})")]
[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'void BuildAssetsUtils.AddNuGetProperties(XDocument doc, IEnumerable packageFolders, string repositoryRoot, ProjectStyle projectStyle, string assetsFilePath, bool success)', validate parameter 'doc' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:NuGet.Commands.BuildAssetsUtils.AddNuGetProperties(System.Xml.Linq.XDocument,System.Collections.Generic.IEnumerable{System.String},System.String,NuGet.ProjectModel.ProjectStyle,System.String,System.Boolean)")]
[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'XElement BuildAssetsUtils.GenerateContentFilesItem(string path, LockFileContentFile item, string packageId, string packageVersion)', validate parameter 'item' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:NuGet.Commands.BuildAssetsUtils.GenerateContentFilesItem(System.String,NuGet.ProjectModel.LockFileContentFile,System.String,System.String)~System.Xml.Linq.XElement")]
[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'string BuildAssetsUtils.GetLanguage(string nugetLanguage)', validate parameter 'nugetLanguage' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:NuGet.Commands.BuildAssetsUtils.GetLanguage(System.String)~System.String")]
@@ -71,7 +70,6 @@
[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'PackageBuilder MSBuildProjectFactory.CreateBuilder(string basePath, NuGetVersion version, string suffix, bool buildIfNeeded, PackageBuilder builder)', validate parameter 'builder' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:NuGet.Commands.MSBuildProjectFactory.CreateBuilder(System.String,NuGet.Versioning.NuGetVersion,System.String,System.Boolean,NuGet.Packaging.PackageBuilder)~NuGet.Packaging.PackageBuilder")]
[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'IProjectFactory MSBuildProjectFactory.ProjectCreator(PackArgs packArgs, string path)', validate parameter 'packArgs' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:NuGet.Commands.MSBuildProjectFactory.ProjectCreator(NuGet.Commands.PackArgs,System.String)~NuGet.Commands.IProjectFactory")]
[assembly: SuppressMessage("Build", "CA1801:Parameter path of method ProjectCreator is never used. Remove the parameter or use it in the method body.", Justification = "", Scope = "member", Target = "~M:NuGet.Commands.MSBuildProjectFactory.ProjectCreator(NuGet.Commands.PackArgs,System.String)~NuGet.Commands.IProjectFactory")]
-[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'void MSBuildRestoreUtility.ApplyIncludeFlags(LibraryDependency dependency, string includeAssets, string excludeAssets, string privateAssets)', validate parameter 'dependency' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:NuGet.Commands.MSBuildRestoreUtility.ApplyIncludeFlags(NuGet.LibraryModel.LibraryDependency,System.String,System.String,System.String)")]
[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'void MSBuildRestoreUtility.ApplyIncludeFlags(ProjectRestoreReference dependency, string includeAssets, string excludeAssets, string privateAssets)', validate parameter 'dependency' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:NuGet.Commands.MSBuildRestoreUtility.ApplyIncludeFlags(NuGet.ProjectModel.ProjectRestoreReference,System.String,System.String,System.String)")]
[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'void MSBuildRestoreUtility.Dump(IEnumerable items, ILogger log)', validate parameter 'items' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:NuGet.Commands.MSBuildRestoreUtility.Dump(System.Collections.Generic.IEnumerable{NuGet.Commands.IMSBuildItem},NuGet.Common.ILogger)")]
[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'string MSBuildRestoreUtility.FixSourcePath(string s)', validate parameter 's' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:NuGet.Commands.MSBuildRestoreUtility.FixSourcePath(System.String)~System.String")]
@@ -87,7 +85,6 @@
[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'PackagesLockFile PackagesLockFileBuilder.CreateNuGetLockFile(LockFile assetsFile)', validate parameter 'assetsFile' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:NuGet.Commands.PackagesLockFileBuilder.CreateNuGetLockFile(NuGet.ProjectModel.LockFile)~NuGet.ProjectModel.PackagesLockFile")]
[assembly: SuppressMessage("Build", "CA1822:Member CreateNuGetLockFile does not access instance data and can be marked as static (Shared in VisualBasic)", Justification = "", Scope = "member", Target = "~M:NuGet.Commands.PackagesLockFileBuilder.CreateNuGetLockFile(NuGet.ProjectModel.LockFile)~NuGet.ProjectModel.PackagesLockFile")]
[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'string PackageSourceProviderExtensions.ResolveAndValidateSource(IPackageSourceProvider sourceProvider, string source)', validate parameter 'sourceProvider' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:NuGet.Commands.PackageSourceProviderExtensions.ResolveAndValidateSource(NuGet.Configuration.IPackageSourceProvider,System.String)~System.String")]
-[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'void PackageSpecificWarningProperties.AddRangeOfCodes(IEnumerable codes, string libraryId, NuGetFramework framework)', validate parameter 'codes' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:NuGet.Commands.PackageSpecificWarningProperties.AddRangeOfCodes(System.Collections.Generic.IEnumerable{NuGet.Common.NuGetLogCode},System.String,NuGet.Frameworks.NuGetFramework)")]
[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'void PackageSpecificWarningProperties.AddRangeOfFrameworks(NuGetLogCode code, string libraryId, IEnumerable frameworks)', validate parameter 'frameworks' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:NuGet.Commands.PackageSpecificWarningProperties.AddRangeOfFrameworks(NuGet.Common.NuGetLogCode,System.String,System.Collections.Generic.IEnumerable{NuGet.Frameworks.NuGetFramework})")]
[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'PackageSpecificWarningProperties PackageSpecificWarningProperties.CreatePackageSpecificWarningProperties(PackageSpec packageSpec)', validate parameter 'packageSpec' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:NuGet.Commands.PackageSpecificWarningProperties.CreatePackageSpecificWarningProperties(NuGet.ProjectModel.PackageSpec)~NuGet.Commands.PackageSpecificWarningProperties")]
[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'PackageSpecificWarningProperties PackageSpecificWarningProperties.CreatePackageSpecificWarningProperties(PackageSpec packageSpec, NuGetFramework framework)', validate parameter 'packageSpec' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:NuGet.Commands.PackageSpecificWarningProperties.CreatePackageSpecificWarningProperties(NuGet.ProjectModel.PackageSpec,NuGet.Frameworks.NuGetFramework)~NuGet.Commands.PackageSpecificWarningProperties")]
diff --git a/src/NuGet.Core/NuGet.Commands/PublicAPI/net472/PublicAPI.Shipped.txt b/src/NuGet.Core/NuGet.Commands/PublicAPI/net472/PublicAPI.Shipped.txt
index 98dfd1823fc..1ef1bc9b9ff 100644
--- a/src/NuGet.Core/NuGet.Commands/PublicAPI/net472/PublicAPI.Shipped.txt
+++ b/src/NuGet.Core/NuGet.Commands/PublicAPI/net472/PublicAPI.Shipped.txt
@@ -415,7 +415,6 @@ NuGet.Commands.PackCommandRunner.RunPackageBuild() -> bool
NuGet.Commands.PackageSourceProviderExtensions
NuGet.Commands.PackageSpecificWarningProperties
~NuGet.Commands.PackageSpecificWarningProperties.Add(NuGet.Common.NuGetLogCode code, string libraryId, NuGet.Frameworks.NuGetFramework framework) -> void
-~NuGet.Commands.PackageSpecificWarningProperties.AddRangeOfCodes(System.Collections.Generic.IEnumerable codes, string libraryId, NuGet.Frameworks.NuGetFramework framework) -> void
~NuGet.Commands.PackageSpecificWarningProperties.AddRangeOfFrameworks(NuGet.Common.NuGetLogCode code, string libraryId, System.Collections.Generic.IEnumerable frameworks) -> void
~NuGet.Commands.PackageSpecificWarningProperties.Contains(NuGet.Common.NuGetLogCode code, string libraryId, NuGet.Frameworks.NuGetFramework framework) -> bool
~NuGet.Commands.PackageSpecificWarningProperties.Equals(NuGet.Commands.PackageSpecificWarningProperties other) -> bool
@@ -879,7 +878,6 @@ override NuGet.Commands.TransitiveNoWarnUtils.NodeWarningProperties.GetHashCode(
override NuGet.Commands.WarningPropertiesCollection.GetHashCode() -> int
~static NuGet.Commands.AddClientCertRunner.Run(NuGet.Commands.AddClientCertArgs args, System.Func getLogger) -> void
~static NuGet.Commands.AddSourceRunner.Run(NuGet.Commands.AddSourceArgs args, System.Func getLogger) -> void
-~static NuGet.Commands.AssetTargetFallbackUtility.ApplyFramework(NuGet.ProjectModel.TargetFrameworkInformation targetFrameworkInfo, System.Collections.Generic.IEnumerable packageTargetFallback, System.Collections.Generic.IEnumerable assetTargetFallback) -> void
~static NuGet.Commands.AssetTargetFallbackUtility.EnsureValidFallback(System.Collections.Generic.IEnumerable packageTargetFallback, System.Collections.Generic.IEnumerable assetTargetFallback, string filePath) -> void
~static NuGet.Commands.AssetTargetFallbackUtility.GetFallbackFramework(NuGet.Frameworks.NuGetFramework projectFramework, System.Collections.Generic.IEnumerable packageTargetFallback, System.Collections.Generic.IEnumerable assetTargetFallback) -> NuGet.Frameworks.NuGetFramework
~static NuGet.Commands.AssetTargetFallbackUtility.GetInvalidFallbackCombinationMessage(string path) -> NuGet.Common.RestoreLogMessage
@@ -946,7 +944,6 @@ override NuGet.Commands.WarningPropertiesCollection.GetHashCode() -> int
~static NuGet.Commands.MSBuildProjectFrameworkUtility.GetProjectFrameworks(System.Collections.Generic.IEnumerable frameworkStrings) -> System.Collections.Generic.IEnumerable
~static NuGet.Commands.MSBuildRestoreItemGroup.Create(string rootName, System.Collections.Generic.IEnumerable items, int position, System.Collections.Generic.IEnumerable conditions) -> NuGet.Commands.MSBuildRestoreItemGroup
~static NuGet.Commands.MSBuildRestoreUtility.AggregateSources(System.Collections.Generic.IEnumerable values, System.Collections.Generic.IEnumerable excludeValues) -> System.Collections.Generic.IEnumerable
-~static NuGet.Commands.MSBuildRestoreUtility.ApplyIncludeFlags(NuGet.LibraryModel.LibraryDependency dependency, string includeAssets, string excludeAssets, string privateAssets) -> void
~static NuGet.Commands.MSBuildRestoreUtility.ApplyIncludeFlags(NuGet.ProjectModel.ProjectRestoreReference dependency, string includeAssets, string excludeAssets, string privateAssets) -> void
~static NuGet.Commands.MSBuildRestoreUtility.ContainsClearKeyword(System.Collections.Generic.IEnumerable values) -> bool
~static NuGet.Commands.MSBuildRestoreUtility.Dump(System.Collections.Generic.IEnumerable items, NuGet.Common.ILogger log) -> void
diff --git a/src/NuGet.Core/NuGet.Commands/PublicAPI/net472/PublicAPI.Unshipped.txt b/src/NuGet.Core/NuGet.Commands/PublicAPI/net472/PublicAPI.Unshipped.txt
index 4c2791b2d81..997a0479ee8 100644
--- a/src/NuGet.Core/NuGet.Commands/PublicAPI/net472/PublicAPI.Unshipped.txt
+++ b/src/NuGet.Core/NuGet.Commands/PublicAPI/net472/PublicAPI.Unshipped.txt
@@ -1,2 +1,5 @@
#nullable enable
NuGet.Commands.RestoreSummary.AuditRan.get -> bool
+~NuGet.Commands.PackageSpecificWarningProperties.AddRangeOfCodes(System.Collections.Immutable.ImmutableArray codes, string libraryId, NuGet.Frameworks.NuGetFramework framework) -> void
+~static NuGet.Commands.AssetTargetFallbackUtility.GetFallbackFrameworkInformation(NuGet.Frameworks.NuGetFramework originalFrameworkName, System.Collections.Generic.IEnumerable packageTargetFallback, System.Collections.Generic.IEnumerable assetTargetFallbackEnum) -> (NuGet.Frameworks.NuGetFramework frameworkName, System.Collections.Immutable.ImmutableArray imports, bool assetTargetFallback, bool warn)
+~static NuGet.Commands.MSBuildRestoreUtility.GetLibraryDependencyIncludeFlags(string includeAssets, string excludeAssets, string privateAssets) -> (NuGet.LibraryModel.LibraryIncludeFlags includeType, NuGet.LibraryModel.LibraryIncludeFlags suppressParent)
diff --git a/src/NuGet.Core/NuGet.Commands/PublicAPI/netcoreapp5.0/PublicAPI.Shipped.txt b/src/NuGet.Core/NuGet.Commands/PublicAPI/netcoreapp5.0/PublicAPI.Shipped.txt
index b95907e24d3..0934f960a1f 100644
--- a/src/NuGet.Core/NuGet.Commands/PublicAPI/netcoreapp5.0/PublicAPI.Shipped.txt
+++ b/src/NuGet.Core/NuGet.Commands/PublicAPI/netcoreapp5.0/PublicAPI.Shipped.txt
@@ -415,7 +415,6 @@ NuGet.Commands.PackCommandRunner.RunPackageBuild() -> bool
NuGet.Commands.PackageSourceProviderExtensions
NuGet.Commands.PackageSpecificWarningProperties
~NuGet.Commands.PackageSpecificWarningProperties.Add(NuGet.Common.NuGetLogCode code, string libraryId, NuGet.Frameworks.NuGetFramework framework) -> void
-~NuGet.Commands.PackageSpecificWarningProperties.AddRangeOfCodes(System.Collections.Generic.IEnumerable codes, string libraryId, NuGet.Frameworks.NuGetFramework framework) -> void
~NuGet.Commands.PackageSpecificWarningProperties.AddRangeOfFrameworks(NuGet.Common.NuGetLogCode code, string libraryId, System.Collections.Generic.IEnumerable frameworks) -> void
~NuGet.Commands.PackageSpecificWarningProperties.Contains(NuGet.Common.NuGetLogCode code, string libraryId, NuGet.Frameworks.NuGetFramework framework) -> bool
~NuGet.Commands.PackageSpecificWarningProperties.Equals(NuGet.Commands.PackageSpecificWarningProperties other) -> bool
@@ -878,7 +877,6 @@ override NuGet.Commands.TransitiveNoWarnUtils.NodeWarningProperties.GetHashCode(
override NuGet.Commands.WarningPropertiesCollection.GetHashCode() -> int
~static NuGet.Commands.AddClientCertRunner.Run(NuGet.Commands.AddClientCertArgs args, System.Func getLogger) -> void
~static NuGet.Commands.AddSourceRunner.Run(NuGet.Commands.AddSourceArgs args, System.Func getLogger) -> void
-~static NuGet.Commands.AssetTargetFallbackUtility.ApplyFramework(NuGet.ProjectModel.TargetFrameworkInformation targetFrameworkInfo, System.Collections.Generic.IEnumerable packageTargetFallback, System.Collections.Generic.IEnumerable assetTargetFallback) -> void
~static NuGet.Commands.AssetTargetFallbackUtility.EnsureValidFallback(System.Collections.Generic.IEnumerable packageTargetFallback, System.Collections.Generic.IEnumerable assetTargetFallback, string filePath) -> void
~static NuGet.Commands.AssetTargetFallbackUtility.GetFallbackFramework(NuGet.Frameworks.NuGetFramework projectFramework, System.Collections.Generic.IEnumerable packageTargetFallback, System.Collections.Generic.IEnumerable assetTargetFallback) -> NuGet.Frameworks.NuGetFramework
~static NuGet.Commands.AssetTargetFallbackUtility.GetInvalidFallbackCombinationMessage(string path) -> NuGet.Common.RestoreLogMessage
@@ -945,7 +943,6 @@ override NuGet.Commands.WarningPropertiesCollection.GetHashCode() -> int
~static NuGet.Commands.MSBuildProjectFrameworkUtility.GetProjectFrameworks(System.Collections.Generic.IEnumerable frameworkStrings) -> System.Collections.Generic.IEnumerable
~static NuGet.Commands.MSBuildRestoreItemGroup.Create(string rootName, System.Collections.Generic.IEnumerable items, int position, System.Collections.Generic.IEnumerable conditions) -> NuGet.Commands.MSBuildRestoreItemGroup
~static NuGet.Commands.MSBuildRestoreUtility.AggregateSources(System.Collections.Generic.IEnumerable values, System.Collections.Generic.IEnumerable excludeValues) -> System.Collections.Generic.IEnumerable
-~static NuGet.Commands.MSBuildRestoreUtility.ApplyIncludeFlags(NuGet.LibraryModel.LibraryDependency dependency, string includeAssets, string excludeAssets, string privateAssets) -> void
~static NuGet.Commands.MSBuildRestoreUtility.ApplyIncludeFlags(NuGet.ProjectModel.ProjectRestoreReference dependency, string includeAssets, string excludeAssets, string privateAssets) -> void
~static NuGet.Commands.MSBuildRestoreUtility.ContainsClearKeyword(System.Collections.Generic.IEnumerable values) -> bool
~static NuGet.Commands.MSBuildRestoreUtility.Dump(System.Collections.Generic.IEnumerable items, NuGet.Common.ILogger log) -> void
diff --git a/src/NuGet.Core/NuGet.Commands/PublicAPI/netcoreapp5.0/PublicAPI.Unshipped.txt b/src/NuGet.Core/NuGet.Commands/PublicAPI/netcoreapp5.0/PublicAPI.Unshipped.txt
index 4c2791b2d81..997a0479ee8 100644
--- a/src/NuGet.Core/NuGet.Commands/PublicAPI/netcoreapp5.0/PublicAPI.Unshipped.txt
+++ b/src/NuGet.Core/NuGet.Commands/PublicAPI/netcoreapp5.0/PublicAPI.Unshipped.txt
@@ -1,2 +1,5 @@
#nullable enable
NuGet.Commands.RestoreSummary.AuditRan.get -> bool
+~NuGet.Commands.PackageSpecificWarningProperties.AddRangeOfCodes(System.Collections.Immutable.ImmutableArray codes, string libraryId, NuGet.Frameworks.NuGetFramework framework) -> void
+~static NuGet.Commands.AssetTargetFallbackUtility.GetFallbackFrameworkInformation(NuGet.Frameworks.NuGetFramework originalFrameworkName, System.Collections.Generic.IEnumerable packageTargetFallback, System.Collections.Generic.IEnumerable assetTargetFallbackEnum) -> (NuGet.Frameworks.NuGetFramework frameworkName, System.Collections.Immutable.ImmutableArray imports, bool assetTargetFallback, bool warn)
+~static NuGet.Commands.MSBuildRestoreUtility.GetLibraryDependencyIncludeFlags(string includeAssets, string excludeAssets, string privateAssets) -> (NuGet.LibraryModel.LibraryIncludeFlags includeType, NuGet.LibraryModel.LibraryIncludeFlags suppressParent)
diff --git a/src/NuGet.Core/NuGet.Commands/PublicAPI/netstandard2.0/PublicAPI.Shipped.txt b/src/NuGet.Core/NuGet.Commands/PublicAPI/netstandard2.0/PublicAPI.Shipped.txt
index 37ec946cccc..b1709d5bae3 100644
--- a/src/NuGet.Core/NuGet.Commands/PublicAPI/netstandard2.0/PublicAPI.Shipped.txt
+++ b/src/NuGet.Core/NuGet.Commands/PublicAPI/netstandard2.0/PublicAPI.Shipped.txt
@@ -415,7 +415,6 @@ NuGet.Commands.PackCommandRunner.RunPackageBuild() -> bool
NuGet.Commands.PackageSourceProviderExtensions
NuGet.Commands.PackageSpecificWarningProperties
~NuGet.Commands.PackageSpecificWarningProperties.Add(NuGet.Common.NuGetLogCode code, string libraryId, NuGet.Frameworks.NuGetFramework framework) -> void
-~NuGet.Commands.PackageSpecificWarningProperties.AddRangeOfCodes(System.Collections.Generic.IEnumerable codes, string libraryId, NuGet.Frameworks.NuGetFramework framework) -> void
~NuGet.Commands.PackageSpecificWarningProperties.AddRangeOfFrameworks(NuGet.Common.NuGetLogCode code, string libraryId, System.Collections.Generic.IEnumerable frameworks) -> void
~NuGet.Commands.PackageSpecificWarningProperties.Contains(NuGet.Common.NuGetLogCode code, string libraryId, NuGet.Frameworks.NuGetFramework framework) -> bool
~NuGet.Commands.PackageSpecificWarningProperties.Equals(NuGet.Commands.PackageSpecificWarningProperties other) -> bool
@@ -877,7 +876,6 @@ override NuGet.Commands.TransitiveNoWarnUtils.NodeWarningProperties.GetHashCode(
override NuGet.Commands.WarningPropertiesCollection.GetHashCode() -> int
~static NuGet.Commands.AddClientCertRunner.Run(NuGet.Commands.AddClientCertArgs args, System.Func getLogger) -> void
~static NuGet.Commands.AddSourceRunner.Run(NuGet.Commands.AddSourceArgs args, System.Func getLogger) -> void
-~static NuGet.Commands.AssetTargetFallbackUtility.ApplyFramework(NuGet.ProjectModel.TargetFrameworkInformation targetFrameworkInfo, System.Collections.Generic.IEnumerable packageTargetFallback, System.Collections.Generic.IEnumerable assetTargetFallback) -> void
~static NuGet.Commands.AssetTargetFallbackUtility.EnsureValidFallback(System.Collections.Generic.IEnumerable packageTargetFallback, System.Collections.Generic.IEnumerable assetTargetFallback, string filePath) -> void
~static NuGet.Commands.AssetTargetFallbackUtility.GetFallbackFramework(NuGet.Frameworks.NuGetFramework projectFramework, System.Collections.Generic.IEnumerable packageTargetFallback, System.Collections.Generic.IEnumerable assetTargetFallback) -> NuGet.Frameworks.NuGetFramework
~static NuGet.Commands.AssetTargetFallbackUtility.GetInvalidFallbackCombinationMessage(string path) -> NuGet.Common.RestoreLogMessage
@@ -944,7 +942,6 @@ override NuGet.Commands.WarningPropertiesCollection.GetHashCode() -> int
~static NuGet.Commands.MSBuildProjectFrameworkUtility.GetProjectFrameworks(System.Collections.Generic.IEnumerable frameworkStrings) -> System.Collections.Generic.IEnumerable
~static NuGet.Commands.MSBuildRestoreItemGroup.Create(string rootName, System.Collections.Generic.IEnumerable items, int position, System.Collections.Generic.IEnumerable conditions) -> NuGet.Commands.MSBuildRestoreItemGroup
~static NuGet.Commands.MSBuildRestoreUtility.AggregateSources(System.Collections.Generic.IEnumerable values, System.Collections.Generic.IEnumerable excludeValues) -> System.Collections.Generic.IEnumerable
-~static NuGet.Commands.MSBuildRestoreUtility.ApplyIncludeFlags(NuGet.LibraryModel.LibraryDependency dependency, string includeAssets, string excludeAssets, string privateAssets) -> void
~static NuGet.Commands.MSBuildRestoreUtility.ApplyIncludeFlags(NuGet.ProjectModel.ProjectRestoreReference dependency, string includeAssets, string excludeAssets, string privateAssets) -> void
~static NuGet.Commands.MSBuildRestoreUtility.ContainsClearKeyword(System.Collections.Generic.IEnumerable values) -> bool
~static NuGet.Commands.MSBuildRestoreUtility.Dump(System.Collections.Generic.IEnumerable items, NuGet.Common.ILogger log) -> void
diff --git a/src/NuGet.Core/NuGet.Commands/PublicAPI/netstandard2.0/PublicAPI.Unshipped.txt b/src/NuGet.Core/NuGet.Commands/PublicAPI/netstandard2.0/PublicAPI.Unshipped.txt
index 4c2791b2d81..997a0479ee8 100644
--- a/src/NuGet.Core/NuGet.Commands/PublicAPI/netstandard2.0/PublicAPI.Unshipped.txt
+++ b/src/NuGet.Core/NuGet.Commands/PublicAPI/netstandard2.0/PublicAPI.Unshipped.txt
@@ -1,2 +1,5 @@
#nullable enable
NuGet.Commands.RestoreSummary.AuditRan.get -> bool
+~NuGet.Commands.PackageSpecificWarningProperties.AddRangeOfCodes(System.Collections.Immutable.ImmutableArray codes, string libraryId, NuGet.Frameworks.NuGetFramework framework) -> void
+~static NuGet.Commands.AssetTargetFallbackUtility.GetFallbackFrameworkInformation(NuGet.Frameworks.NuGetFramework originalFrameworkName, System.Collections.Generic.IEnumerable packageTargetFallback, System.Collections.Generic.IEnumerable assetTargetFallbackEnum) -> (NuGet.Frameworks.NuGetFramework frameworkName, System.Collections.Immutable.ImmutableArray imports, bool assetTargetFallback, bool warn)
+~static NuGet.Commands.MSBuildRestoreUtility.GetLibraryDependencyIncludeFlags(string includeAssets, string excludeAssets, string privateAssets) -> (NuGet.LibraryModel.LibraryIncludeFlags includeType, NuGet.LibraryModel.LibraryIncludeFlags suppressParent)
diff --git a/src/NuGet.Core/NuGet.Commands/RestoreCommand/DependencyGraphResolver.cs b/src/NuGet.Core/NuGet.Commands/RestoreCommand/DependencyGraphResolver.cs
index ecf679b895d..cae34ef4023 100644
--- a/src/NuGet.Core/NuGet.Commands/RestoreCommand/DependencyGraphResolver.cs
+++ b/src/NuGet.Core/NuGet.Commands/RestoreCommand/DependencyGraphResolver.cs
@@ -234,9 +234,7 @@ async static (state) =>
{
importRefItem.LibraryRangeIndex = currentRefRangeIndex = libraryRangeInterningTable.Intern(libraryRange);
- currentRef = currentRef.Clone();
-
- currentRef.LibraryRange = libraryRange;
+ currentRef = new LibraryDependency(currentRef) { LibraryRange = libraryRange };
importRefItem.LibraryDependency = currentRef;
@@ -654,9 +652,10 @@ async static (state) =>
if (isCentrallyPinnedTransitiveDependency)
{
- actualLibraryDependency = dep.Clone();
-
- actualLibraryDependency.LibraryRange.VersionRange = pinnedVersionRange;
+ actualLibraryDependency = new LibraryDependency(dep)
+ {
+ LibraryRange = new LibraryRange(actualLibraryDependency.LibraryRange) { VersionRange = pinnedVersionRange },
+ };
isCentrallyPinnedTransitiveDependency = true;
diff --git a/src/NuGet.Core/NuGet.Commands/RestoreCommand/LockFileBuilder.cs b/src/NuGet.Core/NuGet.Commands/RestoreCommand/LockFileBuilder.cs
index a902fab36d0..bbe9dfcd8fc 100644
--- a/src/NuGet.Core/NuGet.Commands/RestoreCommand/LockFileBuilder.cs
+++ b/src/NuGet.Core/NuGet.Commands/RestoreCommand/LockFileBuilder.cs
@@ -549,7 +549,7 @@ private IEnumerable GetLibraryDependenciesForCentralTransitiv
// If all assets are suppressed then the dependency should not be added
if (suppressParent != LibraryIncludeFlags.All)
{
- yield return new LibraryDependency(noWarn: Array.Empty())
+ yield return new LibraryDependency()
{
LibraryRange = new LibraryRange(centralPackageVersion.Name, centralPackageVersion.VersionRange, LibraryDependencyTarget.Package),
ReferenceType = LibraryDependencyReferenceType.Transitive,
diff --git a/src/NuGet.Core/NuGet.Commands/RestoreCommand/Logging/PackageSpecificWarningProperties.cs b/src/NuGet.Core/NuGet.Commands/RestoreCommand/Logging/PackageSpecificWarningProperties.cs
index dd09544a068..0b8925a2e73 100644
--- a/src/NuGet.Core/NuGet.Commands/RestoreCommand/Logging/PackageSpecificWarningProperties.cs
+++ b/src/NuGet.Core/NuGet.Commands/RestoreCommand/Logging/PackageSpecificWarningProperties.cs
@@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
+using System.Collections.Immutable;
using NuGet.Common;
using NuGet.Frameworks;
using NuGet.ProjectModel;
@@ -110,9 +111,9 @@ public void Add(NuGetLogCode code, string libraryId, NuGetFramework framework)
/// IEnumerable of NuGetLogCode for which no warning should be thrown.
/// Library for which no warning should be thrown.
/// Target graph for which no warning should be thrown.
- public void AddRangeOfCodes(IEnumerable codes, string libraryId, NuGetFramework framework)
+ public void AddRangeOfCodes(ImmutableArray codes, string libraryId, NuGetFramework framework)
{
- foreach (var code in codes.NoAllocEnumerate())
+ foreach (var code in codes)
{
Add(code, libraryId, framework);
}
diff --git a/src/NuGet.Core/NuGet.Commands/RestoreCommand/Logging/TransitiveNoWarnUtils.cs b/src/NuGet.Core/NuGet.Commands/RestoreCommand/Logging/TransitiveNoWarnUtils.cs
index 655e39d5875..7ac7f5d37f8 100644
--- a/src/NuGet.Core/NuGet.Commands/RestoreCommand/Logging/TransitiveNoWarnUtils.cs
+++ b/src/NuGet.Core/NuGet.Commands/RestoreCommand/Logging/TransitiveNoWarnUtils.cs
@@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
+using System.Collections.Immutable;
using System.Linq;
using NuGet.Common;
using NuGet.DependencyResolver;
@@ -222,7 +223,7 @@ private static PackageSpecificWarningProperties ExtractTransitiveNoWarnPropertie
// At the end of the graph traversal add the remaining package no warn lists into the result
foreach ((var packageId, var codes) in packageNoWarn)
{
- resultWarningProperties.AddRangeOfCodes(codes, packageId, parentTargetFramework);
+ resultWarningProperties.AddRangeOfCodes(codes.ToImmutableArray(), packageId, parentTargetFramework);
}
return resultWarningProperties;
diff --git a/src/NuGet.Core/NuGet.Commands/RestoreCommand/ProjectRestoreCommand.cs b/src/NuGet.Core/NuGet.Commands/RestoreCommand/ProjectRestoreCommand.cs
index fd5b757f6af..a046fd1a0bd 100644
--- a/src/NuGet.Core/NuGet.Commands/RestoreCommand/ProjectRestoreCommand.cs
+++ b/src/NuGet.Core/NuGet.Commands/RestoreCommand/ProjectRestoreCommand.cs
@@ -229,12 +229,12 @@ internal static async Task DownloadDepende
async Task ResolveDownloadDependenciesAsync(RemoteWalkContext context, TargetFrameworkInformation targetFrameworkInformation, CancellationToken token)
{
- if (targetFrameworkInformation.DownloadDependencies.Count == 0)
+ if (targetFrameworkInformation.DownloadDependencies.Length == 0)
{
return DownloadDependencyResolutionResult.Create(targetFrameworkInformation.FrameworkName, Array.Empty>(), context.RemoteLibraryProviders);
}
- List>> packageDownloadTasks = new(capacity: targetFrameworkInformation.DownloadDependencies.Count);
+ List>> packageDownloadTasks = new(capacity: targetFrameworkInformation.DownloadDependencies.Length);
foreach (var downloadDependency in targetFrameworkInformation.DownloadDependencies.NoAllocEnumerate())
{
diff --git a/src/NuGet.Core/NuGet.Commands/RestoreCommand/Utility/LockFileUtils.cs b/src/NuGet.Core/NuGet.Commands/RestoreCommand/Utility/LockFileUtils.cs
index f1fa1bd1489..a1ba4b8e609 100644
--- a/src/NuGet.Core/NuGet.Commands/RestoreCommand/Utility/LockFileUtils.cs
+++ b/src/NuGet.Core/NuGet.Commands/RestoreCommand/Utility/LockFileUtils.cs
@@ -657,7 +657,7 @@ public static LockFileTargetLibrary CreateLockFileTargetProject(
out frameworkReferencesObject))
{
projectLib.FrameworkReferences.AddRange(
- ((ISet)frameworkReferencesObject)
+ ((IReadOnlyCollection)frameworkReferencesObject)
.Where(e => e.PrivateAssets != FrameworkDependencyFlags.All)
.Select(f => f.Name));
}
diff --git a/src/NuGet.Core/NuGet.Commands/RestoreCommand/Utility/MSBuildRestoreUtility.cs b/src/NuGet.Core/NuGet.Commands/RestoreCommand/Utility/MSBuildRestoreUtility.cs
index bd2ba17fef5..d22caea9bb6 100644
--- a/src/NuGet.Core/NuGet.Commands/RestoreCommand/Utility/MSBuildRestoreUtility.cs
+++ b/src/NuGet.Core/NuGet.Commands/RestoreCommand/Utility/MSBuildRestoreUtility.cs
@@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
+using System.Collections.Immutable;
using System.Globalization;
using System.IO;
using System.Linq;
@@ -131,13 +132,15 @@ public static DependencyGraphSpec GetDependencySpec(IEnumerable it
///
/// Insert asset flags into dependency, based on ;-delimited string args
///
- public static void ApplyIncludeFlags(LibraryDependency dependency, string includeAssets, string excludeAssets, string privateAssets)
+ public static (LibraryIncludeFlags includeType, LibraryIncludeFlags suppressParent) GetLibraryDependencyIncludeFlags(string includeAssets, string excludeAssets, string privateAssets)
{
var includeFlags = GetIncludeFlags(includeAssets, LibraryIncludeFlags.All);
var excludeFlags = GetIncludeFlags(excludeAssets, LibraryIncludeFlags.None);
- dependency.IncludeType = includeFlags & ~excludeFlags;
- dependency.SuppressParent = GetIncludeFlags(privateAssets, LibraryIncludeFlagUtils.DefaultSuppressParent);
+ var includeType = includeFlags & ~excludeFlags;
+ var suppressParent = GetIncludeFlags(privateAssets, LibraryIncludeFlagUtils.DefaultSuppressParent);
+
+ return (includeType, suppressParent);
}
///
@@ -474,11 +477,11 @@ private static IEnumerable GetTargetFrameworkInforma
clrSupport: clrSupport,
windowsTargetPlatformMinVersion: windowsTargetPlatformMinVersion);
- var targetFrameworkInfo = new TargetFrameworkInformation()
- {
- FrameworkName = targetFramework,
- TargetAlias = targetAlias
- };
+ string runtimeIdentifierGraphPath = null;
+ ImmutableArray imports = [];
+ bool assetTargetFallback = false;
+ bool warn = false;
+
if (restoreType == ProjectStyle.PackageReference ||
restoreType == ProjectStyle.Standalone ||
restoreType == ProjectStyle.DotnetToolReference)
@@ -487,18 +490,29 @@ private static IEnumerable GetTargetFrameworkInforma
.Select(NuGetFramework.Parse)
.ToList();
- var assetTargetFallback = MSBuildStringUtility.Split(item.GetProperty(AssetTargetFallbackUtility.AssetTargetFallback))
+ var assetTargetFallbackList = MSBuildStringUtility.Split(item.GetProperty(AssetTargetFallbackUtility.AssetTargetFallback))
.Select(NuGetFramework.Parse)
.ToList();
// Throw if an invalid combination was used.
- AssetTargetFallbackUtility.EnsureValidFallback(packageTargetFallback, assetTargetFallback, filePath);
+ AssetTargetFallbackUtility.EnsureValidFallback(packageTargetFallback, assetTargetFallbackList, filePath);
// Update the framework appropriately
- AssetTargetFallbackUtility.ApplyFramework(targetFrameworkInfo, packageTargetFallback, assetTargetFallback);
+ (targetFramework, imports, assetTargetFallback, warn) = AssetTargetFallbackUtility.GetFallbackFrameworkInformation(targetFramework, packageTargetFallback, assetTargetFallbackList);
- targetFrameworkInfo.RuntimeIdentifierGraphPath = item.GetProperty("RuntimeIdentifierGraphPath");
+ runtimeIdentifierGraphPath = item.GetProperty("RuntimeIdentifierGraphPath");
}
+
+ var targetFrameworkInfo = new TargetFrameworkInformation()
+ {
+ AssetTargetFallback = assetTargetFallback,
+ FrameworkName = targetFramework,
+ Imports = imports,
+ RuntimeIdentifierGraphPath = runtimeIdentifierGraphPath,
+ TargetAlias = targetAlias,
+ Warn = warn
+ };
+
yield return targetFrameworkInfo;
}
}
@@ -608,11 +622,13 @@ private static Tuple, ProjectRestoreReference> GetProjectRestoreRef
private static bool AddDownloadDependencyIfNotExist(PackageSpec spec, string targetAlias, DownloadDependency dependency)
{
- TargetFrameworkInformation frameworkInfo = spec.TargetFrameworks.Single(e => e.TargetAlias.Equals(targetAlias, StringComparison.Ordinal));
+ var index = spec.TargetFrameworks.SingleIndex(e => e.TargetAlias.Equals(targetAlias, StringComparison.Ordinal));
+ var frameworkInfo = spec.TargetFrameworks[index];
if (!frameworkInfo.DownloadDependencies.Contains(dependency))
{
- frameworkInfo.DownloadDependencies.Add(dependency);
+ var newDownloadDependencies = frameworkInfo.DownloadDependencies.Add(dependency);
+ spec.TargetFrameworks[index] = new TargetFrameworkInformation(frameworkInfo) { DownloadDependencies = newDownloadDependencies };
return true;
}
@@ -621,25 +637,27 @@ private static bool AddDownloadDependencyIfNotExist(PackageSpec spec, string tar
private static bool AddDependencyIfNotExist(PackageSpec spec, LibraryDependency dependency)
{
- foreach (var targetAlias in spec.TargetFrameworks.Select(e => e.TargetAlias))
+ for (int i = 0; i < spec.TargetFrameworks.Count; i++)
{
+ var targetAlias = spec.TargetFrameworks[i].TargetAlias;
AddDependencyIfNotExist(spec, targetAlias, dependency);
}
return false;
}
-
private static bool AddDependencyIfNotExist(PackageSpec spec, string targetAlias, LibraryDependency dependency)
{
- var frameworkInfo = spec.TargetFrameworks.Single(e => e.TargetAlias.Equals(targetAlias, StringComparison.Ordinal));
+ var index = spec.TargetFrameworks.SingleIndex(e => e.TargetAlias.Equals(targetAlias, StringComparison.Ordinal));
+ var frameworkInfo = spec.TargetFrameworks[index];
+ var dependencies = frameworkInfo.Dependencies;
if (!spec.Dependencies
- .Concat(frameworkInfo.Dependencies)
+ .Concat(dependencies)
.Select(d => d.Name)
.Contains(dependency.Name, StringComparer.OrdinalIgnoreCase))
{
- frameworkInfo.Dependencies.Add(dependency);
+ spec.TargetFrameworks[index] = new TargetFrameworkInformation(frameworkInfo) { Dependencies = dependencies.Add(dependency) };
return true;
}
@@ -652,9 +670,10 @@ private static void AddPackageReferences(PackageSpec spec, IEnumerable noWarn = MSBuildStringUtility.GetNuGetLogCodes(item.GetProperty("NoWarn"));
+ var noWarn = MSBuildStringUtility.GetNuGetLogCodes(item.GetProperty("NoWarn"));
+ (var includeType, var suppressParent) = GetLibraryDependencyIncludeFlags(item);
- var dependency = new LibraryDependency(noWarn)
+ var dependency = new LibraryDependency()
{
LibraryRange = new LibraryRange(
name: item.GetProperty("Id"),
@@ -664,11 +683,12 @@ private static void AddPackageReferences(PackageSpec spec, IEnumerable e.TargetAlias.Equals(targetAlias, StringComparison.Ordinal));
+ var index = spec.TargetFrameworks.SingleIndex(e => e.TargetAlias.Equals(targetAlias, StringComparison.Ordinal));
+ TargetFrameworkInformation frameworkInfo = spec.TargetFrameworks[index];
if (!frameworkInfo
.FrameworkReferences
@@ -770,7 +791,8 @@ private static bool AddFrameworkReferenceIfNotExists(PackageSpec spec, string ta
.Contains(frameworkReference, ComparisonUtility.FrameworkReferenceNameComparer))
{
var privateAssets = FrameworkDependencyFlagsUtils.GetFlags(MSBuildStringUtility.Split(privateAssetsValue));
- frameworkInfo.FrameworkReferences.Add(new FrameworkDependency(frameworkReference, privateAssets));
+ FrameworkDependency[] newFrameworkReferences = [.. frameworkInfo.FrameworkReferences, new FrameworkDependency(frameworkReference, privateAssets)];
+ spec.TargetFrameworks[index] = new TargetFrameworkInformation(frameworkInfo) { FrameworkReferences = newFrameworkReferences };
return true;
}
return false;
@@ -1144,9 +1166,27 @@ private static void AddCentralPackageVersions(PackageSpec spec, IEnumerable targetAlias.Equals(f.TargetAlias, StringComparison.OrdinalIgnoreCase));
- frameworkInfo.CentralPackageVersions.AddRange(versions);
- LibraryDependency.ApplyCentralVersionInformation(frameworkInfo.Dependencies, frameworkInfo.CentralPackageVersions);
+ var index = spec.TargetFrameworks.FirstIndex(f => targetAlias.Equals(f.TargetAlias, StringComparison.OrdinalIgnoreCase));
+ var frameworkInfo = spec.TargetFrameworks[index];
+
+ var newCentralPackageVersions = frameworkInfo.CentralPackageVersions;
+ if (versions.Count > 0)
+ {
+ if (newCentralPackageVersions.Count > 0)
+ {
+ versions.AddRange(newCentralPackageVersions);
+ }
+
+ newCentralPackageVersions = versions;
+ }
+
+ var newDependencies = LibraryDependency.ApplyCentralVersionInformation(frameworkInfo.Dependencies, newCentralPackageVersions);
+
+ spec.TargetFrameworks[index] = new TargetFrameworkInformation(frameworkInfo)
+ {
+ CentralPackageVersions = newCentralPackageVersions,
+ Dependencies = newDependencies
+ };
}
}
}
diff --git a/src/NuGet.Core/NuGet.Commands/RestoreCommand/Utility/NoOpRestoreUtilities.cs b/src/NuGet.Core/NuGet.Commands/RestoreCommand/Utility/NoOpRestoreUtilities.cs
index 56dce7b684d..de7f9b11c2f 100644
--- a/src/NuGet.Core/NuGet.Commands/RestoreCommand/Utility/NoOpRestoreUtilities.cs
+++ b/src/NuGet.Core/NuGet.Commands/RestoreCommand/Utility/NoOpRestoreUtilities.cs
@@ -273,7 +273,7 @@ internal static List GetRestoreOutput(RestoreRequest request, LockFile l
pathResolvers.Add(new VersionFolderPathResolver(restoreMetadataFallbackFolder));
}
- var packageFiles = new List(lockFile.Libraries.Count + request.Project.TargetFrameworks.Sum(i => i.DownloadDependencies.Count));
+ var packageFiles = new List(lockFile.Libraries.Count + request.Project.TargetFrameworks.Sum(i => i.DownloadDependencies.Length));
foreach (var library in lockFile.Libraries)
{
diff --git a/src/NuGet.Core/NuGet.Commands/RestoreCommand/Utility/ToolRestoreUtility.cs b/src/NuGet.Core/NuGet.Commands/RestoreCommand/Utility/ToolRestoreUtility.cs
index e6daf3eb81b..27a480dd584 100644
--- a/src/NuGet.Core/NuGet.Commands/RestoreCommand/Utility/ToolRestoreUtility.cs
+++ b/src/NuGet.Core/NuGet.Commands/RestoreCommand/Utility/ToolRestoreUtility.cs
@@ -4,7 +4,6 @@
using System;
using System.Collections.Generic;
using System.Linq;
-using NuGet.Common;
using NuGet.Configuration;
using NuGet.Frameworks;
using NuGet.LibraryModel;
@@ -37,13 +36,13 @@ public static PackageSpec GetSpec(string projectFilePath, string id, VersionRang
{
TargetAlias = frameworkShortFolderName,
FrameworkName = framework,
- Dependencies = new List
- {
- new LibraryDependency(noWarn: Array.Empty())
+ Dependencies =
+ [
+ new LibraryDependency()
{
LibraryRange = new LibraryRange(id, versionRange, LibraryDependencyTarget.Package)
}
- }
+ ]
}
},
RestoreMetadata = new ProjectRestoreMetadata()
diff --git a/src/NuGet.Core/NuGet.Commands/Utility/AssetTargetFallbackUtility.cs b/src/NuGet.Core/NuGet.Commands/Utility/AssetTargetFallbackUtility.cs
index bd1a5e98dcf..b9997e8b26f 100644
--- a/src/NuGet.Core/NuGet.Commands/Utility/AssetTargetFallbackUtility.cs
+++ b/src/NuGet.Core/NuGet.Commands/Utility/AssetTargetFallbackUtility.cs
@@ -2,10 +2,10 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Collections.Generic;
+using System.Collections.Immutable;
using System.Linq;
using NuGet.Common;
using NuGet.Frameworks;
-using NuGet.ProjectModel;
using NuGet.Shared;
namespace NuGet.Commands
@@ -57,26 +57,32 @@ public static NuGetFramework GetFallbackFramework(NuGetFramework projectFramewor
///
/// Update TargetFrameworkInformation properties.
///
- public static void ApplyFramework(TargetFrameworkInformation targetFrameworkInfo, IEnumerable packageTargetFallback, IEnumerable assetTargetFallback)
+ public static (NuGetFramework frameworkName, ImmutableArray imports, bool assetTargetFallback, bool warn) GetFallbackFrameworkInformation(NuGetFramework originalFrameworkName, IEnumerable packageTargetFallback, IEnumerable assetTargetFallbackEnum)
{
// Update the framework appropriately
- targetFrameworkInfo.FrameworkName = GetFallbackFramework(
- targetFrameworkInfo.FrameworkName,
+ var frameworkName = GetFallbackFramework(
+ originalFrameworkName,
packageTargetFallback,
- assetTargetFallback);
+ assetTargetFallbackEnum);
- if (assetTargetFallback?.Any() == true)
+ ImmutableArray imports = [];
+ bool assetTargetFallback = false;
+ bool warn = false;
+
+ if (assetTargetFallbackEnum?.Any() == true)
{
// AssetTargetFallback
- targetFrameworkInfo.Imports = assetTargetFallback.AsList();
- targetFrameworkInfo.AssetTargetFallback = true;
- targetFrameworkInfo.Warn = true;
+ imports = assetTargetFallbackEnum.ToImmutableArray();
+ assetTargetFallback = true;
+ warn = true;
}
else if (packageTargetFallback?.Any() == true)
{
// PackageTargetFallback
- targetFrameworkInfo.Imports = packageTargetFallback.AsList();
+ imports = packageTargetFallback.ToImmutableArray();
}
+
+ return (frameworkName, imports, assetTargetFallback, warn);
}
}
}
diff --git a/src/NuGet.Core/NuGet.Common/GlobalSuppressions.cs b/src/NuGet.Core/NuGet.Common/GlobalSuppressions.cs
index 733fab96c85..17f2b44a9c3 100644
--- a/src/NuGet.Core/NuGet.Common/GlobalSuppressions.cs
+++ b/src/NuGet.Core/NuGet.Common/GlobalSuppressions.cs
@@ -17,7 +17,6 @@
[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'Task LegacyLoggerAdapter.LogAsync(ILogMessage message)', validate parameter 'message' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:NuGet.Common.LegacyLoggerAdapter.LogAsync(NuGet.Common.ILogMessage)~System.Threading.Tasks.Task")]
[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'void LocalResourceUtils.DeleteDirectoryTree(string folderPath, List failedDeletes)', validate parameter 'failedDeletes' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:NuGet.Common.LocalResourceUtils.DeleteDirectoryTree(System.String,System.Collections.Generic.List{System.String})")]
[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'string LoggingExtensions.FormatWithCode(ILogMessage message)', validate parameter 'message' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:NuGet.Common.LoggingExtensions.FormatWithCode(NuGet.Common.ILogMessage)~System.String")]
-[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'IEnumerable MSBuildStringUtility.GetDistinctNuGetLogCodesOrDefault(IEnumerable> nugetLogCodeLists)', validate parameter 'nugetLogCodeLists' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:NuGet.Common.MSBuildStringUtility.GetDistinctNuGetLogCodesOrDefault(System.Collections.Generic.IEnumerable{System.Collections.Generic.IEnumerable{NuGet.Common.NuGetLogCode}})~System.Collections.Generic.IEnumerable{NuGet.Common.NuGetLogCode}")]
[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'IEnumerable PathResolver.GetFilteredPackageFiles(ICollection source, Func getPath, IEnumerable wildcards)', validate parameter 'source' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:NuGet.Common.PathResolver.GetFilteredPackageFiles``1(System.Collections.Generic.ICollection{``0},System.Func{``0,System.String},System.Collections.Generic.IEnumerable{System.String})~System.Collections.Generic.IEnumerable{``0}")]
[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'bool PathResolver.IsWildcardSearch(string filter)', validate parameter 'filter' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:NuGet.Common.PathResolver.IsWildcardSearch(System.String)~System.Boolean")]
[assembly: SuppressMessage("Build", "CA1062:In externally visible method 'string PathResolver.NormalizeWildcardForExcludedFiles(string basePath, string wildcard)', validate parameter 'wildcard' is non-null before using it. If appropriate, throw an ArgumentNullException when the argument is null or add a Code Contract precondition asserting non-null argument.", Justification = "", Scope = "member", Target = "~M:NuGet.Common.PathResolver.NormalizeWildcardForExcludedFiles(System.String,System.String)~System.String")]
diff --git a/src/NuGet.Core/NuGet.Common/MsBuildStringUtility.cs b/src/NuGet.Core/NuGet.Common/MsBuildStringUtility.cs
index ba2b0db6eb0..89c392cfda2 100644
--- a/src/NuGet.Core/NuGet.Common/MsBuildStringUtility.cs
+++ b/src/NuGet.Core/NuGet.Common/MsBuildStringUtility.cs
@@ -2,7 +2,9 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
+using System.Buffers;
using System.Collections.Generic;
+using System.Collections.Immutable;
using System.Linq;
namespace NuGet.Common
@@ -89,28 +91,39 @@ public static bool IsTrueOrEmpty(string? value)
///
/// A comma or semicolon delimited list of NuGet log codes.
/// An containing the values that were successfully parsed from the specified string.
- public static IList GetNuGetLogCodes(string s)
+ public static ImmutableArray GetNuGetLogCodes(string s)
{
// The Split() method already checks for an empty string and returns Array.Empty().
string[] split = MSBuildStringUtility.Split(s, ';', ',');
if (split.Length == 0)
{
- return Array.Empty();
+ return [];
}
- List logCodes = new List(capacity: split.Length);
+ NuGetLogCode[]? logCodes = null;
+ int index = 0;
for (int i = 0; i < split.Length; i++)
{
if (split[i].StartsWith("NU", StringComparison.OrdinalIgnoreCase) &&
Enum.TryParse(value: split[i], ignoreCase: true, out NuGetLogCode logCode))
{
- logCodes.Add(logCode);
+ logCodes ??= ArrayPool.Shared.Rent(split.Length);
+
+ logCodes[index++] = logCode;
}
}
- return logCodes;
+ if (logCodes == null)
+ {
+ return [];
+ }
+
+ var retVal = logCodes.AsSpan(0, index).ToImmutableArray();
+ ArrayPool.Shared.Return(logCodes);
+
+ return retVal;
}
///
@@ -142,32 +155,32 @@ public static IList GetNuGetLogCodes(string s)
///
/// Return empty list of NuGetLogCode if all lists of NuGetLogCode are not the same.
///
- public static IEnumerable GetDistinctNuGetLogCodesOrDefault(IEnumerable?> nugetLogCodeLists)
+ public static ImmutableArray GetDistinctNuGetLogCodesOrDefault(ImmutableArray> nugetLogCodeLists)
{
- if (nugetLogCodeLists.Any())
+ if (nugetLogCodeLists.Length == 0)
{
- var result = Enumerable.Empty();
- var first = true;
+ return [];
+ }
- foreach (IEnumerable? logCodeList in nugetLogCodeLists)
+ ImmutableArray result = [];
+ var first = true;
+
+ foreach (ImmutableArray logCodeList in nugetLogCodeLists)
+ {
+ // If this is first item, assign it to result
+ if (first)
{
- // If this is first item, assign it to result
- if (first)
- {
- result = logCodeList;
- first = false;
- }
- // Compare the rest items to the first one.
- else if (result == null || logCodeList == null || result.Count() != logCodeList.Count() || !result.All(logCodeList.Contains))
- {
- return Enumerable.Empty();
- }
+ result = logCodeList;
+ first = false;
+ }
+ // Compare the rest items to the first one.
+ else if (result == null || logCodeList == null || result.Length != logCodeList.Length || !result.All(logCodeList.Contains))
+ {
+ return [];
}
-
- return result ?? Enumerable.Empty();
}
- return Enumerable.Empty();
+ return result;
}
}
}
diff --git a/src/NuGet.Core/NuGet.Common/NuGet.Common.csproj b/src/NuGet.Core/NuGet.Common/NuGet.Common.csproj
index df8a73d5945..75ed5accd26 100644
--- a/src/NuGet.Core/NuGet.Common/NuGet.Common.csproj
+++ b/src/NuGet.Core/NuGet.Common/NuGet.Common.csproj
@@ -26,6 +26,10 @@
+
+
+
+
True
diff --git a/src/NuGet.Core/NuGet.Common/PublicAPI.Shipped.txt b/src/NuGet.Core/NuGet.Common/PublicAPI.Shipped.txt
index 1eca5c91000..36a90fb4e04 100644
--- a/src/NuGet.Core/NuGet.Common/PublicAPI.Shipped.txt
+++ b/src/NuGet.Core/NuGet.Common/PublicAPI.Shipped.txt
@@ -571,8 +571,6 @@ static NuGet.Common.LoggingExtensions.GetName(this NuGet.Common.NuGetLogCode cod
static NuGet.Common.LoggingExtensions.TryGetName(this NuGet.Common.NuGetLogCode code, out string? codeString) -> bool
static NuGet.Common.MSBuildStringUtility.Convert(string? value) -> string?
static NuGet.Common.MSBuildStringUtility.GetBooleanOrNull(string? value) -> bool?
-static NuGet.Common.MSBuildStringUtility.GetDistinctNuGetLogCodesOrDefault(System.Collections.Generic.IEnumerable?>! nugetLogCodeLists) -> System.Collections.Generic.IEnumerable!
-static NuGet.Common.MSBuildStringUtility.GetNuGetLogCodes(string! s) -> System.Collections.Generic.IList!
static NuGet.Common.MSBuildStringUtility.IsTrue(string? value) -> bool
static NuGet.Common.MSBuildStringUtility.IsTrueOrEmpty(string? value) -> bool
static NuGet.Common.MSBuildStringUtility.Split(string! s) -> string![]!
diff --git a/src/NuGet.Core/NuGet.Common/PublicAPI.Unshipped.txt b/src/NuGet.Core/NuGet.Common/PublicAPI.Unshipped.txt
index 7dc5c58110b..89471331c55 100644
--- a/src/NuGet.Core/NuGet.Common/PublicAPI.Unshipped.txt
+++ b/src/NuGet.Core/NuGet.Common/PublicAPI.Unshipped.txt
@@ -1 +1,3 @@
#nullable enable
+static NuGet.Common.MSBuildStringUtility.GetDistinctNuGetLogCodesOrDefault(System.Collections.Immutable.ImmutableArray> nugetLogCodeLists) -> System.Collections.Immutable.ImmutableArray
+static NuGet.Common.MSBuildStringUtility.GetNuGetLogCodes(string! s) -> System.Collections.Immutable.ImmutableArray
diff --git a/src/NuGet.Core/NuGet.DependencyResolver.Core/PackagingUtility.cs b/src/NuGet.Core/NuGet.DependencyResolver.Core/PackagingUtility.cs
index 560b0d191ca..1260646ed04 100644
--- a/src/NuGet.Core/NuGet.DependencyResolver.Core/PackagingUtility.cs
+++ b/src/NuGet.Core/NuGet.DependencyResolver.Core/PackagingUtility.cs
@@ -1,8 +1,6 @@
// 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.Common;
using NuGet.LibraryModel;
namespace NuGet.DependencyResolver
@@ -33,7 +31,7 @@ public static LibraryDependency GetLibraryDependencyFromNuspec(Packaging.Core.Pa
// Create the library
// Nuspec references cannot contain suppress parent flags
- var libraryDependency = new LibraryDependency(noWarn: Array.Empty())
+ var libraryDependency = new LibraryDependency()
{
LibraryRange = new LibraryRange
{
diff --git a/src/NuGet.Core/NuGet.DependencyResolver.Core/Remote/RemoteDependencyWalker.cs b/src/NuGet.Core/NuGet.DependencyResolver.Core/Remote/RemoteDependencyWalker.cs
index 6ad733df9cf..cba80f0400f 100644
--- a/src/NuGet.Core/NuGet.DependencyResolver.Core/Remote/RemoteDependencyWalker.cs
+++ b/src/NuGet.Core/NuGet.DependencyResolver.Core/Remote/RemoteDependencyWalker.cs
@@ -8,7 +8,6 @@
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
-using NuGet.Common;
using NuGet.Frameworks;
using NuGet.LibraryModel;
using NuGet.Packaging;
@@ -260,7 +259,7 @@ public static bool EvaluateRuntimeDependencies(ref LibraryRange libraryRange, st
// Look up any additional dependencies for this package
foreach (var runtimeDependency in runtimeGraph.FindRuntimeDependencies(runtimeName, libraryRange.Name).NoAllocEnumerate())
{
- var libraryDependency = new LibraryDependency(noWarn: Array.Empty())
+ var libraryDependency = new LibraryDependency() // TODO: NK
{
LibraryRange = new LibraryRange()
{
diff --git a/src/NuGet.Core/NuGet.LibraryModel/LibraryDependency.cs b/src/NuGet.Core/NuGet.LibraryModel/LibraryDependency.cs
index d9bd69ded0a..d49187fd0cb 100644
--- a/src/NuGet.Core/NuGet.LibraryModel/LibraryDependency.cs
+++ b/src/NuGet.Core/NuGet.LibraryModel/LibraryDependency.cs
@@ -3,8 +3,9 @@
using System;
using System.Collections.Generic;
+using System.Collections.Immutable;
using System.Diagnostics.CodeAnalysis;
-using System.Linq;
+using System.Runtime.InteropServices;
using NuGet.Common;
using NuGet.Shared;
using NuGet.Versioning;
@@ -13,53 +14,54 @@ namespace NuGet.LibraryModel
{
public class LibraryDependency : IEquatable
{
- public required LibraryRange LibraryRange { get; set; }
+ // private fields to allow for validating initialization values
+ private ImmutableArray _noWarn = [];
- public LibraryIncludeFlags IncludeType { get; set; } = LibraryIncludeFlags.All;
+ public required LibraryRange LibraryRange { get; init; }
- public LibraryIncludeFlags SuppressParent { get; set; } = LibraryIncludeFlagUtils.DefaultSuppressParent;
+ public LibraryIncludeFlags IncludeType { get; init; } = LibraryIncludeFlags.All;
- public IList NoWarn { get; set; }
+ public LibraryIncludeFlags SuppressParent { get; init; } = LibraryIncludeFlagUtils.DefaultSuppressParent;
+
+ public ImmutableArray NoWarn
+ {
+ get => _noWarn;
+ init
+ {
+ _noWarn = value.IsDefault ? ImmutableArray.Empty : value;
+ }
+ }
public string Name => LibraryRange.Name;
///
/// True if the PackageReference is added by the SDK and not the user.
///
- public bool AutoReferenced { get; set; }
+ public bool AutoReferenced { get; init; }
///
/// True if the dependency has the version set through CentralPackageVersionManagement file.
///
- public bool VersionCentrallyManaged { get; set; }
+ public bool VersionCentrallyManaged { get; init; }
///
/// Information regarding if the dependency is direct or transitive.
///
- public LibraryDependencyReferenceType ReferenceType { get; set; } = LibraryDependencyReferenceType.Direct;
+ public LibraryDependencyReferenceType ReferenceType { get; init; } = LibraryDependencyReferenceType.Direct;
- public bool GeneratePathProperty { get; set; }
+ public bool GeneratePathProperty { get; init; }
- public string? Aliases { get; set; }
+ public string? Aliases { get; init; }
///
/// Gets or sets a value indicating a version override for any centrally defined version.
///
- public VersionRange? VersionOverride { get; set; }
+ public VersionRange? VersionOverride { get; init; }
/// Initializes a new instance of the LibraryDependency class.
/// Required properties must be set when using this constructor.
public LibraryDependency()
- : this(new List())
- {
- }
-
- /// Initializes a new instance of the LibraryDependency class with the specified NoWarn codes.
- /// Specifies a containing values.
- /// Required properties must be set when using this constructor.
- public LibraryDependency(IList noWarn)
{
- NoWarn = noWarn;
}
/// Initializes a new instance of the LibraryDependency class.
@@ -76,7 +78,7 @@ internal LibraryDependency(
LibraryRange libraryRange,
LibraryIncludeFlags includeType,
LibraryIncludeFlags suppressParent,
- IList noWarn,
+ ImmutableArray noWarn,
bool autoReferenced,
bool generatePathProperty,
bool versionCentrallyManaged,
@@ -96,6 +98,21 @@ internal LibraryDependency(
VersionOverride = versionOverride;
}
+ [SetsRequiredMembers]
+ public LibraryDependency(LibraryDependency other)
+ {
+ LibraryRange = other.LibraryRange;
+ IncludeType = other.IncludeType;
+ SuppressParent = other.SuppressParent;
+ NoWarn = other.NoWarn;
+ AutoReferenced = other.AutoReferenced;
+ GeneratePathProperty = other.GeneratePathProperty;
+ VersionCentrallyManaged = other.VersionCentrallyManaged;
+ ReferenceType = other.ReferenceType;
+ Aliases = other.Aliases;
+ VersionOverride = other.VersionOverride;
+ }
+
public override string ToString()
{
// Explicitly call .ToString() to ensure string.Concat(string, string, string) overload is called.
@@ -110,7 +127,12 @@ public override int GetHashCode()
hashCode.AddStruct(IncludeType);
hashCode.AddStruct(SuppressParent);
hashCode.AddObject(AutoReferenced);
- hashCode.AddSequence(NoWarn);
+
+ foreach (var item in NoWarn)
+ {
+ hashCode.AddStruct(item);
+ }
+
hashCode.AddObject(GeneratePathProperty);
hashCode.AddObject(VersionCentrallyManaged);
hashCode.AddObject(Aliases);
@@ -148,20 +170,12 @@ public bool Equals(LibraryDependency? other)
ReferenceType == other.ReferenceType;
}
- public LibraryDependency Clone()
- {
- var clonedLibraryRange = new LibraryRange(LibraryRange.Name, LibraryRange.VersionRange, LibraryRange.TypeConstraint);
- var clonedNoWarn = new List(NoWarn);
-
- return new LibraryDependency(clonedLibraryRange, IncludeType, SuppressParent, clonedNoWarn, AutoReferenced, GeneratePathProperty, VersionCentrallyManaged, ReferenceType, Aliases, VersionOverride);
- }
-
///
/// Merge the CentralVersion information to the package reference information.
///
- public static void ApplyCentralVersionInformation(IList packageReferences, IDictionary centralPackageVersions)
+ public static ImmutableArray ApplyCentralVersionInformation(ImmutableArray packageReferences, IReadOnlyDictionary centralPackageVersions)
{
- if (packageReferences == null)
+ if (packageReferences.IsDefault)
{
throw new ArgumentNullException(nameof(packageReferences));
}
@@ -169,25 +183,45 @@ public static void ApplyCentralVersionInformation(IList packa
{
throw new ArgumentNullException(nameof(centralPackageVersions));
}
- if (centralPackageVersions.Count > 0)
+ if (centralPackageVersions.Count == 0)
+ {
+ return packageReferences;
+ }
+
+ LibraryDependency[] result = new LibraryDependency[packageReferences.Length];
+ for (int i = 0; i < packageReferences.Length; i++)
{
- foreach (LibraryDependency d in packageReferences.Where(d => !d.AutoReferenced && d.LibraryRange.VersionRange == null))
+ LibraryDependency d = packageReferences[i];
+ if (!d.AutoReferenced && d.LibraryRange.VersionRange == null)
{
+ var libraryRange = d.LibraryRange;
+ var versionCentrallyManaged = d.VersionCentrallyManaged;
+
if (d.VersionOverride != null)
{
- d.LibraryRange.VersionRange = d.VersionOverride;
-
- continue;
+ libraryRange = new LibraryRange(d.LibraryRange) { VersionRange = d.VersionOverride };
}
-
- if (centralPackageVersions.TryGetValue(d.Name, out CentralPackageVersion? centralPackageVersion))
+ else
{
- d.LibraryRange.VersionRange = centralPackageVersion.VersionRange;
+ if (centralPackageVersions.TryGetValue(d.Name, out CentralPackageVersion? centralPackageVersion))
+ {
+ libraryRange = new LibraryRange(d.LibraryRange) { VersionRange = centralPackageVersion.VersionRange };
+ }
+
+ versionCentrallyManaged = true;
}
- d.VersionCentrallyManaged = true;
+ d = new LibraryDependency(d)
+ {
+ LibraryRange = libraryRange,
+ VersionCentrallyManaged = versionCentrallyManaged
+ };
}
+
+ result[i] = d;
}
+
+ return ImmutableCollectionsMarshal.AsImmutableArray(result);
}
}
}
diff --git a/src/NuGet.Core/NuGet.LibraryModel/LibraryRange.cs b/src/NuGet.Core/NuGet.LibraryModel/LibraryRange.cs
index 1ce89227294..d3d90195fc1 100644
--- a/src/NuGet.Core/NuGet.LibraryModel/LibraryRange.cs
+++ b/src/NuGet.Core/NuGet.LibraryModel/LibraryRange.cs
@@ -33,12 +33,20 @@ public LibraryRange(string name, VersionRange? versionRange, LibraryDependencyTa
TypeConstraint = typeConstraint;
}
- public required string Name { get; set; }
+ [SetsRequiredMembers]
+ public LibraryRange(LibraryRange other)
+ {
+ Name = other.Name;
+ VersionRange = other.VersionRange;
+ TypeConstraint = other.TypeConstraint;
+ }
+
+ public required string Name { get; init; }
// Null is used for all, CLI still has code expecting this
- public VersionRange? VersionRange { get; set; }
+ public VersionRange? VersionRange { get; init; }
- public LibraryDependencyTarget TypeConstraint { get; set; } = LibraryDependencyTarget.All;
+ public LibraryDependencyTarget TypeConstraint { get; init; } = LibraryDependencyTarget.All;
public override string ToString()
{
diff --git a/src/NuGet.Core/NuGet.LibraryModel/NuGet.LibraryModel.csproj b/src/NuGet.Core/NuGet.LibraryModel/NuGet.LibraryModel.csproj
index ac3d77a56c2..34cb783114b 100644
--- a/src/NuGet.Core/NuGet.LibraryModel/NuGet.LibraryModel.csproj
+++ b/src/NuGet.Core/NuGet.LibraryModel/NuGet.LibraryModel.csproj
@@ -16,6 +16,10 @@
$(NETFXTargetFramework)
+
+
+
+
diff --git a/src/NuGet.Core/NuGet.LibraryModel/PublicAPI.Shipped.txt b/src/NuGet.Core/NuGet.LibraryModel/PublicAPI.Shipped.txt
index 94c06f6699d..22cb400e361 100644
--- a/src/NuGet.Core/NuGet.LibraryModel/PublicAPI.Shipped.txt
+++ b/src/NuGet.Core/NuGet.LibraryModel/PublicAPI.Shipped.txt
@@ -44,31 +44,18 @@ NuGet.LibraryModel.Library.this[string! key].get -> object!
NuGet.LibraryModel.Library.this[string! key].set -> void
NuGet.LibraryModel.LibraryDependency
NuGet.LibraryModel.LibraryDependency.Aliases.get -> string?
-NuGet.LibraryModel.LibraryDependency.Aliases.set -> void
NuGet.LibraryModel.LibraryDependency.AutoReferenced.get -> bool
-NuGet.LibraryModel.LibraryDependency.AutoReferenced.set -> void
-NuGet.LibraryModel.LibraryDependency.Clone() -> NuGet.LibraryModel.LibraryDependency!
NuGet.LibraryModel.LibraryDependency.Equals(NuGet.LibraryModel.LibraryDependency? other) -> bool
NuGet.LibraryModel.LibraryDependency.GeneratePathProperty.get -> bool
-NuGet.LibraryModel.LibraryDependency.GeneratePathProperty.set -> void
NuGet.LibraryModel.LibraryDependency.IncludeType.get -> NuGet.LibraryModel.LibraryIncludeFlags
-NuGet.LibraryModel.LibraryDependency.IncludeType.set -> void
NuGet.LibraryModel.LibraryDependency.LibraryDependency() -> void
NuGet.LibraryModel.LibraryDependency.LibraryDependency(NuGet.LibraryModel.LibraryRange! libraryRange) -> void
-NuGet.LibraryModel.LibraryDependency.LibraryDependency(System.Collections.Generic.IList! noWarn) -> void
NuGet.LibraryModel.LibraryDependency.LibraryRange.get -> NuGet.LibraryModel.LibraryRange!
-NuGet.LibraryModel.LibraryDependency.LibraryRange.set -> void
NuGet.LibraryModel.LibraryDependency.Name.get -> string!
-NuGet.LibraryModel.LibraryDependency.NoWarn.get -> System.Collections.Generic.IList!
-NuGet.LibraryModel.LibraryDependency.NoWarn.set -> void
NuGet.LibraryModel.LibraryDependency.ReferenceType.get -> NuGet.LibraryModel.LibraryDependencyReferenceType
-NuGet.LibraryModel.LibraryDependency.ReferenceType.set -> void
NuGet.LibraryModel.LibraryDependency.SuppressParent.get -> NuGet.LibraryModel.LibraryIncludeFlags
-NuGet.LibraryModel.LibraryDependency.SuppressParent.set -> void
NuGet.LibraryModel.LibraryDependency.VersionCentrallyManaged.get -> bool
-NuGet.LibraryModel.LibraryDependency.VersionCentrallyManaged.set -> void
NuGet.LibraryModel.LibraryDependency.VersionOverride.get -> NuGet.Versioning.VersionRange?
-NuGet.LibraryModel.LibraryDependency.VersionOverride.set -> void
NuGet.LibraryModel.LibraryDependencyInfo
NuGet.LibraryModel.LibraryDependencyInfo.Dependencies.get -> System.Collections.Generic.IEnumerable!
NuGet.LibraryModel.LibraryDependencyInfo.Framework.get -> NuGet.Frameworks.NuGetFramework!
@@ -120,14 +107,11 @@ NuGet.LibraryModel.LibraryRange.LibraryRange(string! name) -> void
NuGet.LibraryModel.LibraryRange.LibraryRange(string! name, NuGet.LibraryModel.LibraryDependencyTarget typeConstraint) -> void
NuGet.LibraryModel.LibraryRange.LibraryRange(string! name, NuGet.Versioning.VersionRange? versionRange, NuGet.LibraryModel.LibraryDependencyTarget typeConstraint) -> void
NuGet.LibraryModel.LibraryRange.Name.get -> string!
-NuGet.LibraryModel.LibraryRange.Name.set -> void
NuGet.LibraryModel.LibraryRange.ToLockFileDependencyGroupString() -> string!
NuGet.LibraryModel.LibraryRange.TypeConstraint.get -> NuGet.LibraryModel.LibraryDependencyTarget
-NuGet.LibraryModel.LibraryRange.TypeConstraint.set -> void
NuGet.LibraryModel.LibraryRange.TypeConstraintAllows(NuGet.LibraryModel.LibraryDependencyTarget flag) -> bool
NuGet.LibraryModel.LibraryRange.TypeConstraintAllowsAnyOf(NuGet.LibraryModel.LibraryDependencyTarget flag) -> bool
NuGet.LibraryModel.LibraryRange.VersionRange.get -> NuGet.Versioning.VersionRange?
-NuGet.LibraryModel.LibraryRange.VersionRange.set -> void
NuGet.LibraryModel.LibraryType
NuGet.LibraryModel.LibraryType.Equals(NuGet.LibraryModel.LibraryType other) -> bool
NuGet.LibraryModel.LibraryType.IsKnown.get -> bool
@@ -158,7 +142,6 @@ static NuGet.LibraryModel.DownloadDependency.implicit operator NuGet.LibraryMode
static NuGet.LibraryModel.FrameworkDependencyFlagsUtils.GetFlagString(NuGet.LibraryModel.FrameworkDependencyFlags flags) -> string!
static NuGet.LibraryModel.FrameworkDependencyFlagsUtils.GetFlags(System.Collections.Generic.IEnumerable