Skip to content

Commit 693b9d5

Browse files
Copilotnkolev92
andcommitted
Fix null check in IncludeFlagUtils and update tests with proper types
Co-authored-by: nkolev92 <[email protected]>
1 parent 9d29d07 commit 693b9d5

2 files changed

Lines changed: 57 additions & 30 deletions

File tree

src/NuGet.Core/NuGet.Commands/RestoreCommand/Utility/IncludeFlagUtils.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ internal static Dictionary<string, LibraryIncludeFlags> FlattenDependencyTypes(
6565
static bool IsDependencyPruned(LibraryDependency dependency, IReadOnlyDictionary<string, PrunePackageReference> packagesToPrune)
6666
{
6767
if (packagesToPrune?.TryGetValue(dependency.Name, out PrunePackageReference packageToPrune) == true
68+
&& dependency.LibraryRange.VersionRange != null
6869
&& dependency.LibraryRange.VersionRange.Satisfies(packageToPrune.VersionRange.MaxVersion))
6970
{
7071
return true;

test/NuGet.Core.FuncTests/NuGet.Commands.FuncTest/RestoreCommand_PrunePackageReference.cs

Lines changed: 56 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@
33

44
using System;
55
using System.Collections.Generic;
6+
using System.Collections.Immutable;
67
using System.IO;
78
using System.Linq;
89
using System.Threading;
910
using System.Threading.Tasks;
1011
using FluentAssertions;
1112
using NuGet.Commands.Test;
1213
using NuGet.Common;
14+
using NuGet.Configuration;
15+
using NuGet.Frameworks;
1316
using NuGet.LibraryModel;
1417
using NuGet.Packaging;
1518
using NuGet.ProjectModel;
@@ -1456,23 +1459,27 @@ public void AnalyzePruningResults_WithMultiTargetingProjectAndVariousVersions_Wa
14561459
public void AnalyzePruningResults_WithCPMAndNullVersionRange_DoesNotThrowNullReferenceException()
14571460
{
14581461
// Test for issue: NullReferenceException in package pruning when using CPM and a version is not specified
1459-
var rootProject = @"
1462+
var projectSpec = new PackageSpec(new List<TargetFrameworkInformation>
1463+
{
1464+
new TargetFrameworkInformation
14601465
{
1461-
""frameworks"": {
1462-
""net10.0"": {
1463-
""dependencies"": {
1464-
""A"": {
1465-
""target"": ""Package"",
1466-
},
1467-
},
1468-
""packagesToPrune"": {
1469-
""A"" : ""(,1.0.0]""
1470-
}
1466+
FrameworkName = NuGetFramework.Parse("net10.0"),
1467+
TargetAlias = "net10.0",
1468+
Dependencies = ImmutableArray.Create(new LibraryDependency
1469+
{
1470+
LibraryRange = new LibraryRange("A", null, LibraryDependencyTarget.Package)
1471+
}),
1472+
PackagesToPrune = new Dictionary<string, PrunePackageReference>
1473+
{
1474+
{ "A", new PrunePackageReference("A", VersionRange.Parse("(,1.0.0]")) }
14711475
}
1472-
}
1473-
}";
1476+
}
1477+
})
1478+
{
1479+
Name = "Project1",
1480+
FilePath = Path.Combine(Path.GetTempPath(), "Project1.csproj")
1481+
};
14741482

1475-
var projectSpec = ProjectTestHelpers.GetPackageSpecWithProjectNameAndSpec("Project1", Path.GetTempPath(), rootProject);
14761483
var testLogger = new TestLogger();
14771484
var testEvent = new TelemetryEvent("dummyEvent");
14781485

@@ -1501,24 +1508,43 @@ await SimpleTestPackageUtility.CreateFolderFeedV3Async(
15011508
PackageSaveMode.Defaultv3,
15021509
packageA);
15031510

1504-
var rootProject = @"
1505-
{
1506-
""frameworks"": {
1507-
""net10.0"": {
1508-
""dependencies"": {
1509-
""A"": {
1510-
""target"": ""Package"",
1511-
},
1512-
},
1513-
""packagesToPrune"": {
1514-
""A"" : ""(,1.0.0]""
1511+
// Create PackageSpec manually with null version range to simulate CPM without version
1512+
var projectPath = Path.Combine(pathContext.SolutionRoot, "Project1", "Project1.csproj");
1513+
var projectSpec = new PackageSpec(new List<TargetFrameworkInformation>
1514+
{
1515+
new TargetFrameworkInformation
1516+
{
1517+
FrameworkName = NuGetFramework.Parse("net10.0"),
1518+
TargetAlias = "net10.0",
1519+
Dependencies = ImmutableArray.Create(new LibraryDependency
1520+
{
1521+
LibraryRange = new LibraryRange("A", null, LibraryDependencyTarget.Package)
1522+
}),
1523+
PackagesToPrune = new Dictionary<string, PrunePackageReference>
1524+
{
1525+
{ "A", new PrunePackageReference("A", VersionRange.Parse("(,1.0.0]")) }
1526+
}
15151527
}
1516-
}
1517-
}
1518-
}";
1528+
})
1529+
{
1530+
Name = "Project1",
1531+
FilePath = projectPath,
1532+
RestoreMetadata = new ProjectRestoreMetadata
1533+
{
1534+
ProjectStyle = ProjectStyle.PackageReference,
1535+
ProjectPath = projectPath,
1536+
ProjectName = "Project1",
1537+
ProjectUniqueName = projectPath,
1538+
OutputPath = Path.Combine(pathContext.SolutionRoot, "Project1", "obj"),
1539+
OriginalTargetFrameworks = ["net10.0"],
1540+
ConfigFilePaths = [],
1541+
PackagesPath = pathContext.UserPackagesFolder,
1542+
Sources = [new PackageSource(pathContext.PackageSource)],
1543+
FallbackFolders = [],
1544+
CentralPackageVersionsEnabled = true
1545+
}
1546+
};
15191547

1520-
// Setup project
1521-
var projectSpec = ProjectTestHelpers.GetPackageSpecWithProjectNameAndSpec("Project1", pathContext.SolutionRoot, rootProject);
15221548
var testLogger = new TestLogger();
15231549

15241550
// Act - This should not throw a NullReferenceException during restore

0 commit comments

Comments
 (0)