dependabot-nuget 0.322.0 → 0.322.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (60) hide show
  1. checksums.yaml +4 -4
  2. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Analyze.cs +1 -1
  3. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Discover.cs +10 -23
  4. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Run.cs +9 -0
  5. data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Update.cs +15 -232
  6. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/SdkProjectDiscovery.cs +1 -154
  7. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/ExperimentsManager.cs +3 -12
  8. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/PullRequestBodyGenerator/AzurePackageDetailFinder.cs +30 -0
  9. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/PullRequestBodyGenerator/DetailedPullRequestBodyGenerator.cs +237 -0
  10. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/PullRequestBodyGenerator/GitHubPackageDetailFinder.cs +101 -0
  11. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/PullRequestBodyGenerator/GitLabPackageDetailFinder.cs +107 -0
  12. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/PullRequestBodyGenerator/HttpFetcher.cs +32 -0
  13. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/PullRequestBodyGenerator/IHttpFetcher.cs +30 -0
  14. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/PullRequestBodyGenerator/IPackageDetailFinder.cs +47 -0
  15. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/PullRequestBodyGenerator/IPullRequestBodyGenerator.cs +11 -0
  16. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/PullRequestBodyGenerator/SimplePullRequestBodyGenerator.cs +15 -0
  17. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/PullRequestTextGenerator.cs +7 -3
  18. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/RunWorker.cs +3 -525
  19. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/CreateSecurityUpdatePullRequestHandler.cs +1 -1
  20. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/GroupUpdateAllVersionsHandler.cs +2 -2
  21. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/RefreshGroupUpdatePullRequestHandler.cs +1 -1
  22. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/RefreshSecurityUpdatePullRequestHandler.cs +1 -1
  23. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/UpdateHandlers/RefreshVersionUpdatePullRequestHandler.cs +1 -1
  24. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/FileWriters/FileWriterWorker.cs +1 -1
  25. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/FileWriters/XmlFileWriter.cs +10 -3
  26. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/PackageReferenceUpdater.cs +1 -856
  27. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/UpdaterWorker.cs +16 -200
  28. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/MSBuildHelper.cs +6 -556
  29. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Analyze/AnalyzeWorkerTests.cs +9 -73
  30. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Clone/CloneWorkerTests.cs +2 -2
  31. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/DependencySolver/MSBuildDependencySolverTests.cs +1 -1
  32. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTestBase.cs +1 -20
  33. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.PackagesConfig.cs +3 -62
  34. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.Project.cs +13 -563
  35. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.cs +20 -267
  36. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/SdkProjectDiscoveryTests.cs +2 -2
  37. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/EndToEndTests.cs +131 -131
  38. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/MiscellaneousTests.cs +0 -203
  39. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/PullRequestBodyGenerator/DetailedPullRequestBodyGeneratorTests.cs +871 -0
  40. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/PullRequestBodyGenerator/IPackageDetailFinderTests.cs +28 -0
  41. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/PullRequestBodyGenerator/TestHttpFetcher.cs +23 -0
  42. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/PullRequestTextTests.cs +3 -2
  43. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/SerializationTests.cs +6 -12
  44. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/UpdateHandlers/CreateSecurityUpdatePullRequestHandlerTests.cs +6 -6
  45. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/UpdateHandlers/GroupUpdateAllVersionsHandlerTests.cs +18 -18
  46. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/UpdateHandlers/RefreshGroupUpdatePullRequestHandlerTests.cs +15 -15
  47. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/UpdateHandlers/RefreshSecurityUpdatePullRequestHandlerTests.cs +21 -21
  48. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/UpdateHandlers/RefreshVersionUpdatePullRequestHandlerTests.cs +15 -15
  49. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/UpdateHandlers/UpdateHandlersTestsBase.cs +1 -8
  50. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/FileWriters/FileWriterWorkerTests.cs +1 -1
  51. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/FileWriters/XmlFileWriterTests.cs +85 -0
  52. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/PackageReferenceUpdaterTests.cs +1 -159
  53. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/MSBuildHelperTests.cs +10 -660
  54. metadata +16 -10
  55. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/RunResult.cs +0 -13
  56. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/PullRequestMessageTests.cs +0 -296
  57. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/RunWorkerTests.cs +0 -3592
  58. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/UpdatePermittedAndMessageTests.cs +0 -457
  59. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTests.DirsProj.cs +0 -378
  60. data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/SdkPackageUpdaterHelperTests.cs +0 -175
@@ -1,4 +1,3 @@
1
- using System.Collections.Immutable;
2
1
  using System.Text.Json;
3
2
 
4
3
  using NuGetUpdater.Core.Run;
@@ -13,185 +12,6 @@ using TestFile = (string Path, string Content);
13
12
 
14
13
  public class MSBuildHelperTests : TestBase
15
14
  {
16
- [Fact]
17
- public void GetRootedValue_FindsValue()
18
- {
19
- // Arrange
20
- var projectContents = """
21
- <Project>
22
- <PropertyGroup>
23
- <TargetFramework>net8.0</TargetFramework>
24
- </PropertyGroup>
25
- <ItemGroup>
26
- <PackageReference Include="Some.Package" Version="$(PackageVersion1)" />
27
- </ItemGroup>
28
- </Project>
29
- """;
30
- var propertyInfo = new Dictionary<string, Property>
31
- {
32
- { "PackageVersion1", new("PackageVersion1", "1.1.1", "Packages.props") },
33
- };
34
-
35
- // Act
36
- var (resultType, _, evaluatedValue, _, _) = MSBuildHelper.GetEvaluatedValue(projectContents, propertyInfo);
37
-
38
- Assert.Equal(EvaluationResultType.Success, resultType);
39
-
40
- // Assert
41
- Assert.Equal("""
42
- <Project>
43
- <PropertyGroup>
44
- <TargetFramework>net8.0</TargetFramework>
45
- </PropertyGroup>
46
- <ItemGroup>
47
- <PackageReference Include="Some.Package" Version="1.1.1" />
48
- </ItemGroup>
49
- </Project>
50
- """, evaluatedValue);
51
- }
52
-
53
- [Fact(Timeout = 1000)]
54
- public async Task GetRootedValue_DoesNotRecurseAsync()
55
- {
56
- // Arrange
57
- var projectContents = """
58
- <Project>
59
- <PropertyGroup>
60
- <TargetFramework>net8.0</TargetFramework>
61
- </PropertyGroup>
62
- <ItemGroup>
63
- <PackageReference Include="Some.Package" Version="$(PackageVersion1)" />
64
- </ItemGroup>
65
- </Project>
66
- """;
67
- var propertyInfo = new Dictionary<string, Property>
68
- {
69
- { "PackageVersion1", new("PackageVersion1", "$(PackageVersion2)", "Packages.props") },
70
- { "PackageVersion2", new("PackageVersion2", "$(PackageVersion1)", "Packages.props") }
71
- };
72
- // This is needed to make the timeout work. Without that we could get caugth in an infinite loop.
73
- await Task.Delay(1);
74
-
75
- // Act
76
- var (resultType, _, _, _, errorMessage) = MSBuildHelper.GetEvaluatedValue(projectContents, propertyInfo);
77
-
78
- // Assert
79
- Assert.Equal(EvaluationResultType.CircularReference, resultType);
80
- Assert.Equal("Property 'PackageVersion1' has a circular reference.", errorMessage);
81
- }
82
-
83
- [Theory]
84
- [MemberData(nameof(SolutionProjectPathTestData))]
85
- public void ProjectPathsCanBeParsedFromSolutionFiles(string solutionContent, string[] expectedProjectSubPaths)
86
- {
87
- var solutionPath = Path.GetTempFileName();
88
- var solutionDirectory = Path.GetDirectoryName(solutionPath)!;
89
- try
90
- {
91
- File.WriteAllText(solutionPath, solutionContent);
92
- var actualProjectSubPaths = MSBuildHelper.GetProjectPathsFromSolution(solutionPath).ToArray();
93
- var expectedPaths = expectedProjectSubPaths.Select(path => Path.Combine(solutionDirectory, path)).ToArray();
94
- if (Environment.OSVersion.Platform == PlatformID.Win32NT)
95
- {
96
- // make the test happy when running on Windows
97
- expectedPaths = expectedPaths.Select(p => p.Replace("/", "\\")).ToArray();
98
- }
99
-
100
- AssertEx.Equal(expectedPaths, actualProjectSubPaths);
101
- }
102
- finally
103
- {
104
- File.Delete(solutionPath);
105
- }
106
- }
107
-
108
- [Theory]
109
- [InlineData("<Project><PropertyGroup><TargetFramework>netstandard2.0</TargetFramework></PropertyGroup></Project>", "netstandard2.0", null)]
110
- [InlineData("<Project><PropertyGroup><TargetFrameworks>netstandard2.0</TargetFrameworks></PropertyGroup></Project>", "netstandard2.0", null)]
111
- [InlineData("<Project><PropertyGroup><TargetFrameworks> ; netstandard2.0 ; </TargetFrameworks></PropertyGroup></Project>", "netstandard2.0", null)]
112
- [InlineData("<Project><PropertyGroup><TargetFrameworks>netstandard2.0 ; netstandard2.1 ; </TargetFrameworks></PropertyGroup></Project>", "netstandard2.0", "netstandard2.1")]
113
- [InlineData("<Project><PropertyGroup><TargetFramework>netstandard2.0</TargetFramework><TargetFrameworkVersion Condition='False'>v4.7.2</TargetFrameworkVersion></PropertyGroup></Project>", "netstandard2.0", null)]
114
- [InlineData("<Project><PropertyGroup><TargetFramework>$(PropertyThatCannotBeResolved)</TargetFramework></PropertyGroup></Project>", null, null)]
115
- public async Task TfmsCanBeDeterminedFromProjectContents(string projectContents, string? expectedTfm1, string? expectedTfm2)
116
- {
117
- var projectPath = Path.GetTempFileName();
118
- try
119
- {
120
- File.WriteAllText(projectPath, projectContents);
121
- var expectedTfms = new[] { expectedTfm1, expectedTfm2 }.Where(tfm => tfm is not null).ToArray();
122
- var (_buildFiles, actualTfms) = await MSBuildHelper.LoadBuildFilesAndTargetFrameworksAsync(Path.GetDirectoryName(projectPath)!, projectPath);
123
- AssertEx.Equal(expectedTfms, actualTfms);
124
- }
125
- finally
126
- {
127
- File.Delete(projectPath);
128
- }
129
- }
130
-
131
- [Fact]
132
- public async Task IntermediatePropsAndTargetsAreExcludedFromBuildFileDiscovery()
133
- {
134
- // arrange
135
- var repoFiles = new[]
136
- {
137
- ("project.csproj", """
138
- <Project Sdk="Microsoft.NET.Sdk">
139
- <PropertyGroup>
140
- <TargetFramework>net9.0</TargetFramework>
141
- </PropertyGroup>
142
- <Import Project="SomeFile.props" />
143
- <ItemGroup>
144
- <PackageReference Include="Some.Package" Version="1.0.0" />
145
- </ItemGroup>
146
- </Project>
147
- """),
148
- ("global.json", "{}"),
149
- ("Directory.Build.props", "<Project />"),
150
- ("Directory.Build.targets", "<Project />"),
151
- ("SomeFile.props", "<Project />"),
152
- // these simulate a direct discovery operation having previously been performed
153
- ("obj/project.csproj.nuget.g.props", "<Project />"),
154
- ("obj/project.csproj.nuget.g.targets", "<Project />"),
155
- };
156
- using var tempDir = await TemporaryDirectory.CreateWithContentsAsync(repoFiles);
157
- var fullProjectPath = Path.Combine(tempDir.DirectoryPath, "project.csproj");
158
- await UpdateWorkerTestBase.MockNuGetPackagesInDirectory([], tempDir.DirectoryPath);
159
-
160
- // act
161
- var (buildFiles, _tfms) = await MSBuildHelper.LoadBuildFilesAndTargetFrameworksAsync(tempDir.DirectoryPath, fullProjectPath);
162
-
163
- // assert
164
- var actualBuildFilePaths = buildFiles.Select(f => Path.GetRelativePath(tempDir.DirectoryPath, f.Path).NormalizePathToUnix()).ToArray();
165
- var expectedBuildFilePaths = new[]
166
- {
167
- "project.csproj",
168
- "Directory.Build.props",
169
- "SomeFile.props",
170
- "Directory.Build.targets",
171
- };
172
- AssertEx.Equal(expectedBuildFilePaths, actualBuildFilePaths);
173
- }
174
-
175
- [Theory]
176
- [MemberData(nameof(GetTopLevelPackageDependencyInfosTestData))]
177
- public async Task TopLevelPackageDependenciesCanBeDetermined(TestFile[] buildFileContents, Dependency[] expectedTopLevelDependencies, MockNuGetPackage[] testPackages)
178
- {
179
- using var testDirectory = new TemporaryDirectory();
180
- var buildFiles = new List<ProjectBuildFile>();
181
-
182
- await UpdateWorkerTestBase.MockNuGetPackagesInDirectory(testPackages, testDirectory.DirectoryPath);
183
-
184
- foreach (var (path, content) in buildFileContents)
185
- {
186
- var fullPath = Path.Combine(testDirectory.DirectoryPath, path);
187
- await File.WriteAllTextAsync(fullPath, content);
188
- buildFiles.Add(ProjectBuildFile.Parse(testDirectory.DirectoryPath, fullPath, content));
189
- }
190
-
191
- var actualTopLevelDependencies = MSBuildHelper.GetTopLevelPackageDependencyInfos(buildFiles.ToImmutableArray());
192
- AssertEx.Equal(expectedTopLevelDependencies, actualTopLevelDependencies);
193
- }
194
-
195
15
  [Theory]
196
16
  [InlineData(true)]
197
17
  [InlineData(false)]
@@ -209,8 +29,7 @@ public class MSBuildHelperTests : TestBase
209
29
 
210
30
  Dependency[] expectedDependencies =
211
31
  [
212
- new("NETStandard.Library", "2.0.3", DependencyType.Unknown, TargetFrameworks: ["netstandard2.0"], IsTransitive: true),
213
- new("Package.A", "1.0.0", DependencyType.Unknown, TargetFrameworks: ["netstandard2.0"]),
32
+ new("Package.A", "1.0.0", DependencyType.PackageReference, TargetFrameworks: ["netstandard2.0"], IsDirect: true),
214
33
  new("Package.B", "2.0.0", DependencyType.Unknown, TargetFrameworks: ["netstandard2.0"], IsTransitive: true),
215
34
  new("Package.C", "3.0.0", DependencyType.Unknown, TargetFrameworks: ["netstandard2.0"], IsTransitive: true),
216
35
  new("Package.D", "4.0.0", DependencyType.Unknown, TargetFrameworks: ["netstandard2.0"], IsTransitive: true),
@@ -291,7 +110,7 @@ public class MSBuildHelperTests : TestBase
291
110
 
292
111
  Dependency[] expectedDependencies =
293
112
  [
294
- new("Package.1A", "1.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"]),
113
+ new("Package.1A", "1.0.0", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true),
295
114
  new("Package.1B", "2.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true),
296
115
  new("Package.1C", "3.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true),
297
116
  new("Package.1D", "4.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true),
@@ -308,7 +127,7 @@ public class MSBuildHelperTests : TestBase
308
127
  new("Package.1O", "15.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true),
309
128
  new("Package.1P", "16.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true),
310
129
  new("Package.1Q", "17.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true),
311
- new("Package.1R", "18.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"]),
130
+ new("Package.1R", "18.0.0", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true),
312
131
  new("Package.1S", "19.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true),
313
132
  new("Package.1T", "20.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true),
314
133
  new("Package.1U", "21.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true),
@@ -317,7 +136,7 @@ public class MSBuildHelperTests : TestBase
317
136
  new("Package.1X", "24.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true),
318
137
  new("Package.1Y", "25.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true),
319
138
  new("Package.1Z", "26.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true),
320
- new("Package.2A", "1.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"]),
139
+ new("Package.2A", "1.0.0", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true),
321
140
  new("Package.2B", "2.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true),
322
141
  new("Package.2C", "3.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true),
323
142
  new("Package.2D", "4.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true),
@@ -334,7 +153,7 @@ public class MSBuildHelperTests : TestBase
334
153
  new("Package.2O", "15.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true),
335
154
  new("Package.2P", "16.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true),
336
155
  new("Package.2Q", "17.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true),
337
- new("Package.2R", "18.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"]),
156
+ new("Package.2R", "18.0.0", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect : true),
338
157
  new("Package.2S", "19.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true),
339
158
  new("Package.2T", "20.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true),
340
159
  new("Package.2U", "21.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true),
@@ -385,8 +204,8 @@ public class MSBuildHelperTests : TestBase
385
204
 
386
205
  Dependency[] expectedDependencies =
387
206
  [
388
- new("Package.A", "1.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"]),
389
- new("Package.B", "2.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"]),
207
+ new("Package.A", "1.0.0", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true),
208
+ new("Package.B", "2.0.0", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect: true),
390
209
  ];
391
210
  var packages = new[]
392
211
  {
@@ -422,7 +241,7 @@ public class MSBuildHelperTests : TestBase
422
241
  <add key="contoso" value="https://contoso.com/v3/index.json"
423
242
  </packageSources>
424
243
  </configuration>
425
- """);
244
+ """, TestContext.Current.CancellationToken);
426
245
 
427
246
  // Asserting it didn't throw
428
247
  var actualDependencies = await MSBuildHelper.GetAllPackageDependenciesAsync(
@@ -460,11 +279,11 @@ public class MSBuildHelperTests : TestBase
460
279
  <add key="localSource2" value="local/source2" />
461
280
  </packageSources>
462
281
  </configuration>
463
- """);
282
+ """, TestContext.Current.CancellationToken);
464
283
 
465
284
  Dependency[] expectedDependencies =
466
285
  [
467
- new("Package.A", "1.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"]),
286
+ new("Package.A", "1.0.0", DependencyType.PackageReference, TargetFrameworks: ["net8.0"], IsDirect : true),
468
287
  new("Package.B", "2.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true),
469
288
  ];
470
289
 
@@ -480,108 +299,6 @@ public class MSBuildHelperTests : TestBase
480
299
  AssertEx.Equal(expectedDependencies, actualDependencies);
481
300
  }
482
301
 
483
- [Theory]
484
- [InlineData(true)]
485
- [InlineData(false)]
486
- public async Task DependencyConflictsCanBeResolvedWithBruteForce(bool useExistingSdks)
487
- {
488
- var repoRoot = Directory.CreateTempSubdirectory($"test_{nameof(DependencyConflictsCanBeResolvedWithBruteForce)}_");
489
- MockNuGetPackage[] testPackages =
490
- [
491
- // some base packages
492
- MockNuGetPackage.CreateSimplePackage("Some.Package", "1.0.0", "net8.0"),
493
- MockNuGetPackage.CreateSimplePackage("Some.Package", "1.1.0", "net8.0"),
494
- MockNuGetPackage.CreateSimplePackage("Some.Package", "1.2.0", "net8.0"),
495
- // some packages that are hard-locked to specific versions of the previous package
496
- MockNuGetPackage.CreateSimplePackage("Some.Other.Package", "1.0.0", "net8.0", [(null, [("Some.Package", "[1.0.0]")])]),
497
- MockNuGetPackage.CreateSimplePackage("Some.Other.Package", "1.1.0", "net8.0", [(null, [("Some.Package", "[1.1.0]")])]),
498
- MockNuGetPackage.CreateSimplePackage("Some.Other.Package", "1.2.0", "net8.0", [(null, [("Some.Package", "[1.2.0]")])]),
499
- ];
500
- await UpdateWorkerTestBase.MockNuGetPackagesInDirectory(testPackages, repoRoot.FullName);
501
-
502
- // the package `Some.Package` was already updated from 1.0.0 to 1.2.0, but this causes a conflict with
503
- // `Some.Other.Package` that needs to be resolved
504
- try
505
- {
506
- var projectPath = Path.Join(repoRoot.FullName, "project.csproj");
507
- await File.WriteAllTextAsync(projectPath, """
508
- <Project Sdk="Microsoft.NET.Sdk">
509
- <PropertyGroup>
510
- <TargetFramework>net8.0</TargetFramework>
511
- </PropertyGroup>
512
- <ItemGroup>
513
- <PackageReference Include="Some.Package" Version="1.2.0" />
514
- <PackageReference Include="Some.Other.Package" Version="1.0.0" />
515
- </ItemGroup>
516
- </Project>
517
- """);
518
- var dependencies = new[]
519
- {
520
- new Dependency("Some.Package", "1.2.0", DependencyType.PackageReference),
521
- new Dependency("Some.Other.Package", "1.0.0", DependencyType.PackageReference),
522
- }.ToImmutableArray();
523
- var update = new[]
524
- {
525
- new Dependency("Some.Other.Package", "1.2.0", DependencyType.PackageReference),
526
- };
527
- var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflictsWithBruteForce(
528
- repoRoot.FullName,
529
- projectPath,
530
- "net8.0",
531
- dependencies,
532
- new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
533
- new TestLogger()
534
- );
535
- Assert.NotNull(resolvedDependencies);
536
- Assert.Equal(2, resolvedDependencies.Value.Length);
537
- Assert.Equal("Some.Package", resolvedDependencies.Value[0].Name);
538
- Assert.Equal("1.2.0", resolvedDependencies.Value[0].Version);
539
- Assert.Equal("Some.Other.Package", resolvedDependencies.Value[1].Name);
540
- Assert.Equal("1.2.0", resolvedDependencies.Value[1].Version);
541
- }
542
- finally
543
- {
544
- repoRoot.Delete(recursive: true);
545
- }
546
- }
547
-
548
- [Fact]
549
- public void UpdateWithWorkloadsTargetFrameworks()
550
- {
551
- // Arrange
552
- var projectContents = """
553
- <Project>
554
- <PropertyGroup>
555
- <TargetFrameworks>net8.0-ios;net8.0-android;net8.0-macos;net8.0-maccatalyst;</TargetFrameworks>
556
- </PropertyGroup>
557
- <ItemGroup>
558
- <PackageReference Include="Some.Package" Version="$(PackageVersion1)" />
559
- </ItemGroup>
560
- </Project>
561
- """;
562
- var propertyInfo = new Dictionary<string, Property>
563
- {
564
- { "PackageVersion1", new("PackageVersion1", "1.1.1", "Packages.props") },
565
- };
566
-
567
- // Act
568
- var (resultType, _, evaluatedValue, _, _) = MSBuildHelper.GetEvaluatedValue(projectContents, propertyInfo);
569
-
570
- Assert.Equal(EvaluationResultType.Success, resultType);
571
-
572
- // Assert
573
- Assert.Equal("""
574
- <Project>
575
- <PropertyGroup>
576
- <TargetFrameworks>net8.0-ios;net8.0-android;net8.0-macos;net8.0-maccatalyst;</TargetFrameworks>
577
- </PropertyGroup>
578
- <ItemGroup>
579
- <PackageReference Include="Some.Package" Version="1.1.1" />
580
- </ItemGroup>
581
- </Project>
582
- """, evaluatedValue);
583
- }
584
-
585
302
  [Theory]
586
303
  [MemberData(nameof(GetTargetFrameworkValuesFromProjectData))]
587
304
  public async Task GetTargetFrameworkValuesFromProject(string projectContents, string[] expectedTfms)
@@ -909,371 +626,4 @@ public class MSBuildHelperTests : TestBase
909
626
  new DependencyFileNotParseable("/path/to/NuGet.Config", "Some error message."),
910
627
  ];
911
628
  }
912
-
913
- public static IEnumerable<object[]> GetTopLevelPackageDependencyInfosTestData()
914
- {
915
- // simple case
916
- yield return
917
- [
918
- // build file contents
919
- new[]
920
- {
921
- ("project.csproj", """
922
- <Project Sdk="Microsoft.NET.Sdk">
923
- <ItemGroup>
924
- <PackageReference Include="Some.Package" Version="12.0.1" />
925
- </ItemGroup>
926
- </Project>
927
- """)
928
- },
929
- // expected dependencies
930
- new Dependency[]
931
- {
932
- new(
933
- "Some.Package",
934
- "12.0.1",
935
- DependencyType.PackageReference,
936
- EvaluationResult: new(EvaluationResultType.Success, "12.0.1", "12.0.1", null, null))
937
- },
938
- new MockNuGetPackage[]
939
- {
940
- MockNuGetPackage.CreateSimplePackage("Some.Package", "12.0.1", "net8.0")
941
- }
942
- ];
943
-
944
- // version is a child-node of the package reference
945
- yield return
946
- [
947
- // build file contents
948
- new[]
949
- {
950
- ("project.csproj", """
951
- <Project Sdk="Microsoft.NET.Sdk">
952
- <ItemGroup>
953
- <PackageReference Include="Some.Package">
954
- <Version>12.0.1</Version>
955
- </PackageReference>
956
- </ItemGroup>
957
- </Project>
958
- """)
959
- },
960
- // expected dependencies
961
- new Dependency[]
962
- {
963
- new(
964
- "Some.Package",
965
- "12.0.1",
966
- DependencyType.PackageReference,
967
- EvaluationResult: new(EvaluationResultType.Success, "12.0.1", "12.0.1", null, null))
968
- },
969
- new MockNuGetPackage[]
970
- {
971
- MockNuGetPackage.CreateSimplePackage("Some.Package", "12.0.1", "net8.0")
972
- }
973
- ];
974
-
975
- // version is in property in same file
976
- yield return
977
- [
978
- // build file contents
979
- new[]
980
- {
981
- ("project.csproj", """
982
- <Project Sdk="Microsoft.NET.Sdk">
983
- <PropertyGroup>
984
- <SomePackageVersion>12.0.1</SomePackageVersion>
985
- </PropertyGroup>
986
- <ItemGroup>
987
- <PackageReference Include="Some.Package" Version="$(SomePackageVersion)" />
988
- </ItemGroup>
989
- </Project>
990
- """)
991
- },
992
- // expected dependencies
993
- new Dependency[]
994
- {
995
- new(
996
- "Some.Package",
997
- "12.0.1",
998
- DependencyType.PackageReference,
999
- new(EvaluationResultType.Success, "$(SomePackageVersion)", "12.0.1", "SomePackageVersion", null))
1000
- },
1001
- new MockNuGetPackage[]
1002
- {
1003
- MockNuGetPackage.CreateSimplePackage("Some.Package", "12.0.1", "net8.0")
1004
- }
1005
- ];
1006
-
1007
- // version is a property not triggered by a condition
1008
- yield return
1009
- [
1010
- // build file contents
1011
- new[]
1012
- {
1013
- ("project.csproj", """
1014
- <Project Sdk="Microsoft.NET.Sdk">
1015
- <PropertyGroup>
1016
- <TargetFramework>netstandard2.0</TargetFramework>
1017
- <SomePackageVersion>12.0.1</SomePackageVersion>
1018
- <SomePackageVersion Condition="$(PropertyThatDoesNotExist) == 'true'">13.0.1</SomePackageVersion>
1019
- </PropertyGroup>
1020
- <ItemGroup>
1021
- <PackageReference Include="Some.Package" Version="$(SomePackageVersion)" />
1022
- </ItemGroup>
1023
- </Project>
1024
- """)
1025
- },
1026
- // expected dependencies
1027
- new Dependency[]
1028
- {
1029
- new(
1030
- "Some.Package",
1031
- "12.0.1",
1032
- DependencyType.PackageReference,
1033
- new(EvaluationResultType.Success, "$(SomePackageVersion)", "12.0.1", "SomePackageVersion", null))
1034
- },
1035
- new MockNuGetPackage[]
1036
- {
1037
- MockNuGetPackage.CreateSimplePackage("Some.Package", "12.0.1", "net8.0")
1038
- }
1039
- ];
1040
-
1041
- // version is a property not triggered by a quoted condition
1042
- yield return new object[]
1043
- {
1044
- // build file contents
1045
- new[]
1046
- {
1047
- ("project.csproj", """
1048
- <Project Sdk="Microsoft.NET.Sdk">
1049
- <PropertyGroup>
1050
- <TargetFramework>netstandard2.0</TargetFramework>
1051
- <SomePackageVersion>12.0.1</SomePackageVersion>
1052
- <SomePackageVersion Condition="'$(PropertyThatDoesNotExist)' == 'true'">13.0.1</SomePackageVersion>
1053
- </PropertyGroup>
1054
- <ItemGroup>
1055
- <PackageReference Include="Some.Package" Version="$(SomePackageVersion)" />
1056
- </ItemGroup>
1057
- </Project>
1058
- """)
1059
- },
1060
- // expected dependencies
1061
- new Dependency[]
1062
- {
1063
- new(
1064
- "Some.Package",
1065
- "12.0.1",
1066
- DependencyType.PackageReference,
1067
- new(EvaluationResultType.Success, "$(SomePackageVersion)", "12.0.1", "SomePackageVersion", null))
1068
- },
1069
- new MockNuGetPackage[]
1070
- {
1071
- MockNuGetPackage.CreateSimplePackage("Some.Package", "12.0.1", "net8.0")
1072
- }
1073
- };
1074
-
1075
- // version is a property with a condition checking for an empty string
1076
- yield return
1077
- [
1078
- // build file contents
1079
- new[]
1080
- {
1081
- ("project.csproj", """
1082
- <Project Sdk="Microsoft.NET.Sdk">
1083
- <PropertyGroup>
1084
- <TargetFramework>netstandard2.0</TargetFramework>
1085
- <SomePackageVersion Condition="$(SomePackageVersion) == ''">12.0.1</SomePackageVersion>
1086
- <SomePackageVersion Condition="$(PropertyThatDoesNotExist) == 'true'">13.0.1</SomePackageVersion>
1087
- </PropertyGroup>
1088
- <ItemGroup>
1089
- <PackageReference Include="Some.Package" Version="$(SomePackageVersion)" />
1090
- </ItemGroup>
1091
- </Project>
1092
- """)
1093
- },
1094
- // expected dependencies
1095
- new Dependency[]
1096
- {
1097
- new(
1098
- "Some.Package",
1099
- "12.0.1",
1100
- DependencyType.PackageReference,
1101
- new(EvaluationResultType.Success, "$(SomePackageVersion)", "12.0.1", "SomePackageVersion", null))
1102
- },
1103
- new MockNuGetPackage[]
1104
- {
1105
- MockNuGetPackage.CreateSimplePackage("Some.Package", "12.0.1", "net8.0")
1106
- }
1107
- ];
1108
-
1109
- // version is a property with a quoted condition checking for an empty string
1110
- yield return new object[]
1111
- {
1112
- // build file contents
1113
- new[]
1114
- {
1115
- ("project.csproj", """
1116
- <Project Sdk="Microsoft.NET.Sdk">
1117
- <PropertyGroup>
1118
- <TargetFramework>netstandard2.0</TargetFramework>
1119
- <SomePackageVersion Condition="'$(SomePackageVersion)' == ''">12.0.1</SomePackageVersion>
1120
- <SomePackageVersion Condition="'$(PropertyThatDoesNotExist)' == 'true'">13.0.1</SomePackageVersion>
1121
- </PropertyGroup>
1122
- <ItemGroup>
1123
- <PackageReference Include="Some.Package" Version="$(SomePackageVersion)" />
1124
- </ItemGroup>
1125
- </Project>
1126
- """)
1127
- },
1128
- // expected dependencies
1129
- new Dependency[]
1130
- {
1131
- new(
1132
- "Some.Package",
1133
- "12.0.1",
1134
- DependencyType.PackageReference,
1135
- new(EvaluationResultType.Success, "$(SomePackageVersion)", "12.0.1", "SomePackageVersion", null))
1136
- },
1137
- new MockNuGetPackage[]
1138
- {
1139
- MockNuGetPackage.CreateSimplePackage("Some.Package", "12.0.1", "net8.0")
1140
- }
1141
- };
1142
-
1143
- // version is set in one file, used in another
1144
- yield return
1145
- [
1146
- // build file contents
1147
- new[]
1148
- {
1149
- ("Packages.props", """
1150
- <Project>
1151
- <ItemGroup>
1152
- <PackageReference Update="Package.A" Version="1.6.0" />
1153
- <PackageReference Update="Package.B" Version="5.1.4" />
1154
- </ItemGroup>
1155
- </Project>
1156
- """),
1157
- ("project.csproj", """
1158
- <Project Sdk="Microsoft.NET.Sdk">
1159
- <PropertyGroup>
1160
- <TargetFramework>net8.0</TargetFramework>
1161
- </PropertyGroup>
1162
- <ItemGroup>
1163
- <PackageReference Include="Package.A" Version="1.6.1" />
1164
- </ItemGroup>
1165
- </Project>
1166
- """)
1167
- },
1168
- // expected dependencies
1169
- new Dependency[]
1170
- {
1171
- new(
1172
- "Package.A",
1173
- "1.6.0",
1174
- DependencyType.PackageReference,
1175
- EvaluationResult: new(EvaluationResultType.Success, "1.6.0", "1.6.0", null, null)),
1176
- new(
1177
- "Package.B",
1178
- "5.1.4",
1179
- DependencyType.PackageReference,
1180
- EvaluationResult: new(EvaluationResultType.Success, "5.1.4", "5.1.4", null, null),
1181
- IsUpdate: true),
1182
- },
1183
- new MockNuGetPackage[]
1184
- {
1185
- MockNuGetPackage.CreateSimplePackage("Package.A", "1.6.0", "net8.0"),
1186
- MockNuGetPackage.CreateSimplePackage("Package.A", "1.6.1", "net8.0"),
1187
- MockNuGetPackage.CreateSimplePackage("Package.B", "5.1.4", "net8.0"),
1188
- }
1189
- ];
1190
-
1191
- // version is set in one file, used in another
1192
- yield return
1193
- [
1194
- // build file contents
1195
- new[]
1196
- {
1197
- ("project.csproj", """
1198
- <Project Sdk="Microsoft.NET.Sdk">
1199
- <PropertyGroup>
1200
- <TargetFramework>net8.0</TargetFramework>
1201
- </PropertyGroup>
1202
- <ItemGroup>
1203
- <PackageReference Include="Package.A" />
1204
- </ItemGroup>
1205
- </Project>
1206
- """),
1207
- ("Packages.props", """
1208
- <Project>
1209
- <ItemGroup>
1210
- <PackageReference Update="Package.A" Version="1.6.0" />
1211
- <PackageReference Update="Package.B" Version="5.1.4" />
1212
- </ItemGroup>
1213
- </Project>
1214
- """)
1215
- },
1216
- // expected dependencies
1217
- new Dependency[]
1218
- {
1219
- new(
1220
- "Package.A",
1221
- "1.6.0",
1222
- DependencyType.PackageReference,
1223
- EvaluationResult: new(EvaluationResultType.Success, "1.6.0", "1.6.0", null, null)),
1224
- new(
1225
- "Package.B",
1226
- "5.1.4",
1227
- DependencyType.PackageReference,
1228
- EvaluationResult: new(EvaluationResultType.Success, "5.1.4", "5.1.4", null, null),
1229
- IsUpdate: true),
1230
- },
1231
- new MockNuGetPackage[]
1232
- {
1233
- MockNuGetPackage.CreateSimplePackage("Package.A", "1.6.0", "net8.0"),
1234
- MockNuGetPackage.CreateSimplePackage("Package.B", "5.1.4", "net8.0"),
1235
- }
1236
- ];
1237
- }
1238
-
1239
- public static IEnumerable<object[]> SolutionProjectPathTestData()
1240
- {
1241
- yield return
1242
- [
1243
- """
1244
- Microsoft Visual Studio Solution File, Format Version 12.00
1245
- # Visual Studio 14
1246
- VisualStudioVersion = 14.0.22705.0
1247
- MinimumVisualStudioVersion = 10.0.40219.1
1248
- Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Some.Project", "src\Some.Project\SomeProject.csproj", "{782E0C0A-10D3-444D-9640-263D03D2B20C}"
1249
- EndProject
1250
- Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Some.Project.Test", "src\Some.Project.Test\Some.Project.Test.csproj", "{5C15FD5B-1975-4CEA-8F1B-C0C9174C60A9}"
1251
- EndProject
1252
- Global
1253
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
1254
- Debug|Any CPU = Debug|Any CPU
1255
- Release|Any CPU = Release|Any CPU
1256
- EndGlobalSection
1257
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
1258
- {782E0C0A-10D3-444D-9640-263D03D2B20C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
1259
- {782E0C0A-10D3-444D-9640-263D03D2B20C}.Debug|Any CPU.Build.0 = Debug|Any CPU
1260
- {782E0C0A-10D3-444D-9640-263D03D2B20C}.Release|Any CPU.ActiveCfg = Release|Any CPU
1261
- {782E0C0A-10D3-444D-9640-263D03D2B20C}.Release|Any CPU.Build.0 = Release|Any CPU
1262
- {5C15FD5B-1975-4CEA-8F1B-C0C9174C60A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
1263
- {5C15FD5B-1975-4CEA-8F1B-C0C9174C60A9}.Debug|Any CPU.Build.0 = Debug|Any CPU
1264
- {5C15FD5B-1975-4CEA-8F1B-C0C9174C60A9}.Release|Any CPU.ActiveCfg = Release|Any CPU
1265
- {5C15FD5B-1975-4CEA-8F1B-C0C9174C60A9}.Release|Any CPU.Build.0 = Release|Any CPU
1266
- EndGlobalSection
1267
- GlobalSection(SolutionProperties) = preSolution
1268
- HideSolutionNode = FALSE
1269
- EndGlobalSection
1270
- EndGlobal
1271
- """,
1272
- new[]
1273
- {
1274
- "src/Some.Project/SomeProject.csproj",
1275
- "src/Some.Project.Test/Some.Project.Test.csproj",
1276
- }
1277
- ];
1278
- }
1279
629
  }