|
1 | 1 | // Licensed to the .NET Foundation under one or more agreements.
|
2 | 2 | // The .NET Foundation licenses this file to you under the MIT license.
|
3 | 3 |
|
| 4 | +using System.Text.Json.Nodes; |
4 | 5 | using System.Text.RegularExpressions;
|
5 | 6 | using NuGet.Common;
|
6 | 7 | using NuGet.Frameworks;
|
@@ -301,5 +302,55 @@ public void PlatformPackagesCanBePruned(bool prunePackages)
|
301 | 302 | lockFileTarget.Libraries.Should().Contain(library => library.Name.Equals("System.Text.Json", StringComparison.OrdinalIgnoreCase));
|
302 | 303 | }
|
303 | 304 | }
|
| 305 | + |
| 306 | + [Fact] |
| 307 | + public void TransitiveFrameworkReferencesDoNotAffectPruning() |
| 308 | + { |
| 309 | + var referencedProject = new TestProject("ReferencedProject") |
| 310 | + { |
| 311 | + TargetFrameworks = ToolsetInfo.CurrentTargetFramework, |
| 312 | + IsExe = false |
| 313 | + }; |
| 314 | + referencedProject.PackageReferences.Add(new TestPackageReference("System.Text.Json", "8.0.0")); |
| 315 | + referencedProject.FrameworkReferences.Add("Microsoft.AspNetCore.App"); |
| 316 | + |
| 317 | + var testProject = new TestProject() |
| 318 | + { |
| 319 | + TargetFrameworks = ToolsetInfo.CurrentTargetFramework |
| 320 | + }; |
| 321 | + |
| 322 | + testProject.AdditionalProperties["RestoreEnablePackagePruning"] = "True"; |
| 323 | + testProject.ReferencedProjects.Add(referencedProject); |
| 324 | + |
| 325 | + var testAsset = _testAssetsManager.CreateTestProject(testProject); |
| 326 | + |
| 327 | + new BuildCommand(testAsset).Execute().Should().Pass(); |
| 328 | + |
| 329 | + var getItemsCommand1 = new MSBuildCommand(testAsset, "AddPrunePackageReferences"); |
| 330 | + var itemsResult1 = getItemsCommand1.Execute("-getItem:PrunePackageReference"); |
| 331 | + itemsResult1.Should().Pass(); |
| 332 | + |
| 333 | + var items1 = ParseItemsJson(itemsResult1.StdOut); |
| 334 | + |
| 335 | + var getItemsCommand2 = new MSBuildCommand(testAsset, "ResolvePackageAssets;AddTransitiveFrameworkReferences;AddPrunePackageReferences"); |
| 336 | + var itemsResult2 = getItemsCommand2.Execute("-getItem:PrunePackageReference"); |
| 337 | + itemsResult2.Should().Pass(); |
| 338 | + |
| 339 | + var items2 = ParseItemsJson(itemsResult2.StdOut); |
| 340 | + |
| 341 | + items2.Should().BeEquivalentTo(items1); |
| 342 | + |
| 343 | + static List<KeyValuePair<string,string>> ParseItemsJson(string json) |
| 344 | + { |
| 345 | + List<KeyValuePair<string, string>> ret = new(); |
| 346 | + var root = JsonNode.Parse(json); |
| 347 | + var items = (JsonArray) root["Items"]["PrunePackageReference"]; |
| 348 | + foreach (var item in items) |
| 349 | + { |
| 350 | + ret.Add(new KeyValuePair<string, string>((string)item["Identity"], (string)item["Version"])); |
| 351 | + } |
| 352 | + return ret; |
| 353 | + } |
| 354 | + } |
304 | 355 | }
|
305 | 356 | }
|
0 commit comments