dependabot-nuget 0.289.0 → 0.291.0
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.
- checksums.yaml +4 -4
- data/helpers/lib/NuGetUpdater/Directory.Packages.props +1 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/AnalyzeCommand.cs +7 -3
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli/Commands/RunCommand.cs +1 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Analyze.cs +26 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Discover.cs +2 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Run.cs +0 -6
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Cli.Test/EntryPointTests.Update.cs +1 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/AnalyzeWorker.cs +6 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/CompatabilityChecker.cs +24 -9
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/DependencyFinder.cs +2 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/NuGetContext.cs +0 -13
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Analyze/RequirementConverter.cs +17 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/DiscoveryWorker.cs +44 -5
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/PackagesConfigDiscovery.cs +2 -2
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/ProjectDiscoveryResult.cs +2 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Discover/SdkProjectDiscovery.cs +19 -11
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/ErrorType.cs +1 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/ExperimentsManager.cs +3 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/Advisory.cs +13 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/AllowedUpdate.cs +18 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/CommitOptions.cs +8 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/Condition.cs +19 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/DependencyGroup.cs +8 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/GroupPullRequest.cs +9 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/Job.cs +13 -10
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/PullRequest.cs +11 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/ApiModel/RequirementsUpdateStrategy.cs +15 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/RunWorker.cs +24 -4
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Run/VersionConverter.cs +19 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/BindingRedirectManager.cs +2 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/LockFileUpdater.cs +3 -2
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/PackageReferenceUpdater.cs +43 -18
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/PackagesConfigUpdater.cs +13 -12
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Updater/UpdaterWorker.cs +1 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/JsonHelper.cs +2 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/MSBuildHelper.cs +40 -14
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/NuGetHelper.cs +2 -2
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/ProcessExtensions.cs +45 -7
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core/Utilities/ProjectHelper.cs +2 -2
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Analyze/AnalyzeWorkerTestBase.cs +5 -2
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.DotNetToolsJson.cs +45 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.GlobalJson.cs +35 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.Project.cs +0 -4
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/DiscoveryWorkerTests.cs +41 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/ExpectedDiscoveryResults.cs +1 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Discover/SdkProjectDiscoveryTests.cs +1 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/MockNuGetPackage.cs +2 -1
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/MiscellaneousTests.cs +85 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/RunWorkerTests.cs +7 -31
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Run/SerializationTests.cs +340 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/TemporaryDirectory.cs +18 -7
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/PackagesConfigUpdaterTests.cs +24 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTestBase.cs +0 -12
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTests.DotNetTools.cs +84 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTests.GlobalJson.cs +66 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTests.PackageReference.cs +55 -0
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Update/UpdateWorkerTests.PackagesConfig.cs +0 -6
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/MSBuildHelperTests.cs +785 -755
- data/helpers/lib/NuGetUpdater/NuGetUpdater.Core.Test/Utilities/PathHelperTests.cs +2 -2
- data/lib/dependabot/nuget/analysis/analysis_json_reader.rb +1 -1
- data/lib/dependabot/nuget/analysis/dependency_analysis.rb +3 -3
- data/lib/dependabot/nuget/discovery/dependency_details.rb +10 -3
- data/lib/dependabot/nuget/discovery/dependency_file_discovery.rb +8 -12
- data/lib/dependabot/nuget/discovery/discovery_json_reader.rb +214 -29
- data/lib/dependabot/nuget/discovery/project_discovery.rb +41 -8
- data/lib/dependabot/nuget/discovery/workspace_discovery.rb +14 -19
- data/lib/dependabot/nuget/file_fetcher.rb +3 -3
- data/lib/dependabot/nuget/file_parser.rb +92 -3
- data/lib/dependabot/nuget/file_updater.rb +13 -13
- data/lib/dependabot/nuget/language.rb +82 -0
- data/lib/dependabot/nuget/native_helpers.rb +37 -5
- data/lib/dependabot/nuget/package_manager.rb +51 -0
- data/lib/dependabot/nuget/update_checker/requirements_updater.rb +23 -27
- data/lib/dependabot/nuget/update_checker.rb +116 -190
- metadata +20 -29
- data/lib/dependabot/nuget/discovery/directory_packages_props_discovery.rb +0 -43
- data/lib/dependabot/nuget/http_response_helpers.rb +0 -19
- data/lib/dependabot/nuget/native_discovery/native_dependency_details.rb +0 -102
- data/lib/dependabot/nuget/native_discovery/native_dependency_file_discovery.rb +0 -122
- data/lib/dependabot/nuget/native_discovery/native_discovery_json_reader.rb +0 -277
- data/lib/dependabot/nuget/native_discovery/native_evaluation_details.rb +0 -63
- data/lib/dependabot/nuget/native_discovery/native_project_discovery.rb +0 -104
- data/lib/dependabot/nuget/native_discovery/native_property_details.rb +0 -43
- data/lib/dependabot/nuget/native_discovery/native_workspace_discovery.rb +0 -61
- data/lib/dependabot/nuget/native_update_checker/native_requirements_updater.rb +0 -105
- data/lib/dependabot/nuget/native_update_checker/native_update_checker.rb +0 -214
- data/lib/dependabot/nuget/nuget_client.rb +0 -223
- data/lib/dependabot/nuget/update_checker/compatibility_checker.rb +0 -116
- data/lib/dependabot/nuget/update_checker/dependency_finder.rb +0 -297
- data/lib/dependabot/nuget/update_checker/nupkg_fetcher.rb +0 -221
- data/lib/dependabot/nuget/update_checker/nuspec_fetcher.rb +0 -110
- data/lib/dependabot/nuget/update_checker/property_updater.rb +0 -196
- data/lib/dependabot/nuget/update_checker/repository_finder.rb +0 -466
- data/lib/dependabot/nuget/update_checker/tfm_comparer.rb +0 -34
- data/lib/dependabot/nuget/update_checker/tfm_finder.rb +0 -30
- data/lib/dependabot/nuget/update_checker/version_finder.rb +0 -449
@@ -147,8 +147,10 @@ public class MSBuildHelperTests : TestBase
|
|
147
147
|
AssertEx.Equal(expectedTopLevelDependencies, actualTopLevelDependencies);
|
148
148
|
}
|
149
149
|
|
150
|
-
[
|
151
|
-
|
150
|
+
[Theory]
|
151
|
+
[InlineData(true)]
|
152
|
+
[InlineData(false)]
|
153
|
+
public async Task AllPackageDependenciesCanBeTraversed(bool useExistingSdks)
|
152
154
|
{
|
153
155
|
using var temp = new TemporaryDirectory();
|
154
156
|
MockNuGetPackage[] testPackages =
|
@@ -173,13 +175,16 @@ public class MSBuildHelperTests : TestBase
|
|
173
175
|
temp.DirectoryPath,
|
174
176
|
"netstandard2.0",
|
175
177
|
[new Dependency("Package.A", "1.0.0", DependencyType.Unknown)],
|
178
|
+
new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
|
176
179
|
new TestLogger()
|
177
180
|
);
|
178
181
|
AssertEx.Equal(expectedDependencies, actualDependencies);
|
179
182
|
}
|
180
183
|
|
181
|
-
[
|
182
|
-
|
184
|
+
[Theory]
|
185
|
+
[InlineData(true)]
|
186
|
+
[InlineData(false)]
|
187
|
+
public async Task AllPackageDependencies_DoNotTruncateLongDependencyLists(bool useExistingSdks)
|
183
188
|
{
|
184
189
|
using var temp = new TemporaryDirectory();
|
185
190
|
MockNuGetPackage[] testPackages =
|
@@ -301,7 +306,14 @@ public class MSBuildHelperTests : TestBase
|
|
301
306
|
new Dependency("Package.2A", "1.0.0", DependencyType.Unknown),
|
302
307
|
new Dependency("Package.2R", "18.0.0", DependencyType.Unknown),
|
303
308
|
};
|
304
|
-
var actualDependencies = await MSBuildHelper.GetAllPackageDependenciesAsync(
|
309
|
+
var actualDependencies = await MSBuildHelper.GetAllPackageDependenciesAsync(
|
310
|
+
temp.DirectoryPath,
|
311
|
+
temp.DirectoryPath,
|
312
|
+
"net8.0",
|
313
|
+
packages,
|
314
|
+
new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
|
315
|
+
new TestLogger()
|
316
|
+
);
|
305
317
|
for (int i = 0; i < actualDependencies.Length; i++)
|
306
318
|
{
|
307
319
|
var ad = actualDependencies[i];
|
@@ -312,8 +324,10 @@ public class MSBuildHelperTests : TestBase
|
|
312
324
|
AssertEx.Equal(expectedDependencies, actualDependencies);
|
313
325
|
}
|
314
326
|
|
315
|
-
[
|
316
|
-
|
327
|
+
[Theory]
|
328
|
+
[InlineData(true)]
|
329
|
+
[InlineData(false)]
|
330
|
+
public async Task AllPackageDependencies_DoNotIncludeUpdateOnlyPackages(bool useExistingSdks)
|
317
331
|
{
|
318
332
|
using var temp = new TemporaryDirectory();
|
319
333
|
MockNuGetPackage[] testPackages =
|
@@ -335,117 +349,96 @@ public class MSBuildHelperTests : TestBase
|
|
335
349
|
new Dependency("Package.B", "2.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"]),
|
336
350
|
new Dependency("Package.C", "3.0.0", DependencyType.Unknown, IsUpdate: true)
|
337
351
|
};
|
338
|
-
var actualDependencies = await MSBuildHelper.GetAllPackageDependenciesAsync(
|
352
|
+
var actualDependencies = await MSBuildHelper.GetAllPackageDependenciesAsync(
|
353
|
+
temp.DirectoryPath,
|
354
|
+
temp.DirectoryPath,
|
355
|
+
"net8.0",
|
356
|
+
packages,
|
357
|
+
new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
|
358
|
+
new TestLogger()
|
359
|
+
);
|
339
360
|
AssertEx.Equal(expectedDependencies, actualDependencies);
|
340
361
|
}
|
341
362
|
|
342
|
-
[
|
343
|
-
|
363
|
+
[Theory]
|
364
|
+
[InlineData(true)]
|
365
|
+
[InlineData(false)]
|
366
|
+
public async Task GetAllPackageDependencies_NugetConfigInvalid_DoesNotThrow(bool useExistingSdks)
|
344
367
|
{
|
345
|
-
var
|
346
|
-
var nugetHttpCacheDirectory = Environment.GetEnvironmentVariable("NUGET_HTTP_CACHE_PATH");
|
347
|
-
|
348
|
-
try
|
349
|
-
{
|
350
|
-
using var temp = new TemporaryDirectory();
|
351
|
-
|
352
|
-
// It is important to have empty NuGet caches for this test, so override them with temp directories.
|
353
|
-
var tempNuGetPackagesDirectory = Path.Combine(temp.DirectoryPath, ".nuget", "packages");
|
354
|
-
Environment.SetEnvironmentVariable("NUGET_PACKAGES", tempNuGetPackagesDirectory);
|
355
|
-
var tempNuGetHttpCacheDirectory = Path.Combine(temp.DirectoryPath, ".nuget", "v3-cache");
|
356
|
-
Environment.SetEnvironmentVariable("NUGET_HTTP_CACHE_PATH", tempNuGetHttpCacheDirectory);
|
357
|
-
|
358
|
-
// Write the NuGet.config with a missing "/>"
|
359
|
-
await File.WriteAllTextAsync(
|
360
|
-
Path.Combine(temp.DirectoryPath, "NuGet.Config"), """
|
361
|
-
<?xml version="1.0" encoding="utf-8"?>
|
362
|
-
<configuration>
|
363
|
-
<packageSources>
|
364
|
-
<clear />
|
365
|
-
<add key="contoso" value="https://contoso.com/v3/index.json"
|
366
|
-
</packageSources>
|
367
|
-
</configuration>
|
368
|
-
""");
|
368
|
+
using var temp = new TemporaryDirectory();
|
369
369
|
|
370
|
-
|
371
|
-
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
|
376
|
-
|
377
|
-
|
378
|
-
|
379
|
-
|
380
|
-
|
381
|
-
|
382
|
-
|
383
|
-
|
384
|
-
|
370
|
+
// Write the NuGet.config with a missing "/>"
|
371
|
+
await File.WriteAllTextAsync(
|
372
|
+
Path.Combine(temp.DirectoryPath, "NuGet.Config"), """
|
373
|
+
<?xml version="1.0" encoding="utf-8"?>
|
374
|
+
<configuration>
|
375
|
+
<packageSources>
|
376
|
+
<clear />
|
377
|
+
<add key="contoso" value="https://contoso.com/v3/index.json"
|
378
|
+
</packageSources>
|
379
|
+
</configuration>
|
380
|
+
""");
|
381
|
+
|
382
|
+
// Asserting it didn't throw
|
383
|
+
var actualDependencies = await MSBuildHelper.GetAllPackageDependenciesAsync(
|
384
|
+
temp.DirectoryPath,
|
385
|
+
temp.DirectoryPath,
|
386
|
+
"net8.0",
|
387
|
+
[new Dependency("Some.Package", "4.5.11", DependencyType.Unknown)],
|
388
|
+
new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
|
389
|
+
new TestLogger()
|
390
|
+
);
|
385
391
|
}
|
386
392
|
|
387
|
-
[
|
388
|
-
|
393
|
+
[Theory]
|
394
|
+
[InlineData(true)]
|
395
|
+
[InlineData(false)]
|
396
|
+
public async Task LocalPackageSourcesAreHonored(bool useExistingSdks)
|
389
397
|
{
|
390
|
-
var
|
391
|
-
var nugetHttpCacheDirectory = Environment.GetEnvironmentVariable("NUGET_HTTP_CACHE_PATH");
|
398
|
+
using var temp = new TemporaryDirectory();
|
392
399
|
|
393
|
-
|
394
|
-
|
395
|
-
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
MockNuGetPackage.CreateSimplePackage("Package.A", "1.0.0", "net8.0", [(null, [("Package.B", "2.0.0")])]).WriteToDirectory(localSource1);
|
413
|
-
MockNuGetPackage.CreateSimplePackage("Package.B", "2.0.0", "net8.0").WriteToDirectory(localSource2);
|
414
|
-
await File.WriteAllTextAsync(Path.Join(temp.DirectoryPath, "NuGet.Config"), """
|
415
|
-
<configuration>
|
416
|
-
<packageSources>
|
417
|
-
<add key="localSource1" value="local\source1" />
|
418
|
-
<add key="localSource2" value="local/source2" />
|
419
|
-
</packageSources>
|
420
|
-
</configuration>
|
421
|
-
""");
|
400
|
+
// create two local package sources with different packages available in each
|
401
|
+
string localSource1 = Path.Combine(temp.DirectoryPath, "local", "source1");
|
402
|
+
Directory.CreateDirectory(localSource1);
|
403
|
+
string localSource2 = Path.Combine(temp.DirectoryPath, "local", "source2");
|
404
|
+
Directory.CreateDirectory(localSource2);
|
405
|
+
|
406
|
+
// `Package.A` will only live in `local\source1` and uses Windows-style directory separators and will have
|
407
|
+
// a dependency on `Package.B` which is only available in `local/source2` and uses Unix-style directory
|
408
|
+
// separators.
|
409
|
+
MockNuGetPackage.CreateSimplePackage("Package.A", "1.0.0", "net8.0", [(null, [("Package.B", "2.0.0")])]).WriteToDirectory(localSource1);
|
410
|
+
MockNuGetPackage.CreateSimplePackage("Package.B", "2.0.0", "net8.0").WriteToDirectory(localSource2);
|
411
|
+
await File.WriteAllTextAsync(Path.Join(temp.DirectoryPath, "NuGet.Config"), """
|
412
|
+
<configuration>
|
413
|
+
<packageSources>
|
414
|
+
<add key="localSource1" value="local\source1" />
|
415
|
+
<add key="localSource2" value="local/source2" />
|
416
|
+
</packageSources>
|
417
|
+
</configuration>
|
418
|
+
""");
|
422
419
|
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
420
|
+
Dependency[] expectedDependencies =
|
421
|
+
[
|
422
|
+
new("Package.A", "1.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"]),
|
423
|
+
new("Package.B", "2.0.0", DependencyType.Unknown, TargetFrameworks: ["net8.0"], IsTransitive: true),
|
424
|
+
];
|
428
425
|
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
433
|
-
|
434
|
-
|
435
|
-
)
|
426
|
+
Dependency[] actualDependencies = await MSBuildHelper.GetAllPackageDependenciesAsync(
|
427
|
+
temp.DirectoryPath,
|
428
|
+
temp.DirectoryPath,
|
429
|
+
"net8.0",
|
430
|
+
[new Dependency("Package.A", "1.0.0", DependencyType.Unknown)],
|
431
|
+
new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
|
432
|
+
new TestLogger()
|
433
|
+
);
|
436
434
|
|
437
|
-
|
438
|
-
}
|
439
|
-
finally
|
440
|
-
{
|
441
|
-
// Restore the NuGet caches.
|
442
|
-
Environment.SetEnvironmentVariable("NUGET_PACKAGES", nugetPackagesDirectory);
|
443
|
-
Environment.SetEnvironmentVariable("NUGET_HTTP_CACHE_PATH", nugetHttpCacheDirectory);
|
444
|
-
}
|
435
|
+
AssertEx.Equal(expectedDependencies, actualDependencies);
|
445
436
|
}
|
446
437
|
|
447
|
-
[
|
448
|
-
|
438
|
+
[Theory]
|
439
|
+
[InlineData(true)]
|
440
|
+
[InlineData(false)]
|
441
|
+
public async Task DependencyConflictsCanBeResolvedWithBruteForce(bool useExistingSdks)
|
449
442
|
{
|
450
443
|
var repoRoot = Directory.CreateTempSubdirectory($"test_{nameof(DependencyConflictsCanBeResolvedWithBruteForce)}_");
|
451
444
|
MockNuGetPackage[] testPackages =
|
@@ -486,7 +479,14 @@ public class MSBuildHelperTests : TestBase
|
|
486
479
|
{
|
487
480
|
new Dependency("Some.Other.Package", "1.2.0", DependencyType.PackageReference),
|
488
481
|
};
|
489
|
-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflictsWithBruteForce(
|
482
|
+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflictsWithBruteForce(
|
483
|
+
repoRoot.FullName,
|
484
|
+
projectPath,
|
485
|
+
"net8.0",
|
486
|
+
dependencies,
|
487
|
+
new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
|
488
|
+
new TestLogger()
|
489
|
+
);
|
490
490
|
Assert.NotNull(resolvedDependencies);
|
491
491
|
Assert.Equal(2, resolvedDependencies.Length);
|
492
492
|
Assert.Equal("Some.Package", resolvedDependencies[0].Name);
|
@@ -541,303 +541,315 @@ public class MSBuildHelperTests : TestBase
|
|
541
541
|
#region
|
542
542
|
// Updating root package
|
543
543
|
// CS-Script Code to 2.0.0 requires its dependency Microsoft.CodeAnalysis.CSharp.Scripting to be 3.6.0 and its transitive dependency Microsoft.CodeAnalysis.Common to be 3.6.0
|
544
|
-
[
|
545
|
-
|
544
|
+
[Theory]
|
545
|
+
[InlineData(true)]
|
546
|
+
[InlineData(false)]
|
547
|
+
public async Task DependencyConflictsCanBeResolvedNewUpdatingTopLevelPackage(bool useExistingSdks)
|
546
548
|
{
|
547
|
-
var
|
549
|
+
using var tempDirectory = new TemporaryDirectory();
|
550
|
+
var projectPath = Path.Join(tempDirectory.DirectoryPath, "project.csproj");
|
551
|
+
await File.WriteAllTextAsync(projectPath, """
|
552
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
553
|
+
<PropertyGroup>
|
554
|
+
<TargetFramework>net8.0</TargetFramework>
|
555
|
+
</PropertyGroup>
|
556
|
+
<ItemGroup>
|
557
|
+
<PackageReference Include="CS-Script.Core" Version="1.3.1" />
|
558
|
+
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="3.4.0" />
|
559
|
+
<PackageReference Include="Microsoft.CodeAnalysis.Scripting.Common" Version="3.4.0" />
|
560
|
+
</ItemGroup>
|
561
|
+
</Project>
|
562
|
+
""");
|
548
563
|
|
549
|
-
|
564
|
+
var dependencies = new[]
|
550
565
|
{
|
551
|
-
|
552
|
-
|
553
|
-
|
554
|
-
|
555
|
-
|
556
|
-
|
557
|
-
<ItemGroup>
|
558
|
-
<PackageReference Include="CS-Script.Core" Version="1.3.1" />
|
559
|
-
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="3.4.0" />
|
560
|
-
<PackageReference Include="Microsoft.CodeAnalysis.Scripting.Common" Version="3.4.0" />
|
561
|
-
</ItemGroup>
|
562
|
-
</Project>
|
563
|
-
""");
|
564
|
-
|
565
|
-
var dependencies = new[]
|
566
|
-
{
|
567
|
-
// Add comment about root and dependencies
|
568
|
-
new Dependency("CS-Script.Core", "1.3.1", DependencyType.PackageReference),
|
569
|
-
new Dependency("Microsoft.CodeAnalysis.Common", "3.4.0", DependencyType.PackageReference),
|
570
|
-
new Dependency("Microsoft.CodeAnalysis.Scripting.Common", "3.4.0", DependencyType.PackageReference),
|
571
|
-
};
|
572
|
-
var update = new[]
|
573
|
-
{
|
574
|
-
new Dependency("CS-Script.Core", "2.0.0", DependencyType.PackageReference),
|
575
|
-
};
|
576
|
-
|
577
|
-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
|
578
|
-
Assert.NotNull(resolvedDependencies);
|
579
|
-
Assert.Equal(3, resolvedDependencies.Length);
|
580
|
-
Assert.Equal("CS-Script.Core", resolvedDependencies[0].Name);
|
581
|
-
Assert.Equal("2.0.0", resolvedDependencies[0].Version);
|
582
|
-
Assert.Equal("Microsoft.CodeAnalysis.Common", resolvedDependencies[1].Name);
|
583
|
-
Assert.Equal("3.6.0", resolvedDependencies[1].Version);
|
584
|
-
Assert.Equal("Microsoft.CodeAnalysis.Scripting.Common", resolvedDependencies[2].Name);
|
585
|
-
Assert.Equal("3.6.0", resolvedDependencies[2].Version);
|
586
|
-
}
|
587
|
-
finally
|
566
|
+
// Add comment about root and dependencies
|
567
|
+
new Dependency("CS-Script.Core", "1.3.1", DependencyType.PackageReference),
|
568
|
+
new Dependency("Microsoft.CodeAnalysis.Common", "3.4.0", DependencyType.PackageReference),
|
569
|
+
new Dependency("Microsoft.CodeAnalysis.Scripting.Common", "3.4.0", DependencyType.PackageReference),
|
570
|
+
};
|
571
|
+
var update = new[]
|
588
572
|
{
|
589
|
-
|
590
|
-
}
|
573
|
+
new Dependency("CS-Script.Core", "2.0.0", DependencyType.PackageReference),
|
574
|
+
};
|
575
|
+
|
576
|
+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(
|
577
|
+
tempDirectory.DirectoryPath,
|
578
|
+
projectPath,
|
579
|
+
"net8.0",
|
580
|
+
dependencies,
|
581
|
+
update,
|
582
|
+
new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
|
583
|
+
new TestLogger()
|
584
|
+
);
|
585
|
+
Assert.NotNull(resolvedDependencies);
|
586
|
+
Assert.Equal(3, resolvedDependencies.Length);
|
587
|
+
Assert.Equal("CS-Script.Core", resolvedDependencies[0].Name);
|
588
|
+
Assert.Equal("2.0.0", resolvedDependencies[0].Version);
|
589
|
+
Assert.Equal("Microsoft.CodeAnalysis.Common", resolvedDependencies[1].Name);
|
590
|
+
Assert.Equal("3.6.0", resolvedDependencies[1].Version);
|
591
|
+
Assert.Equal("Microsoft.CodeAnalysis.Scripting.Common", resolvedDependencies[2].Name);
|
592
|
+
Assert.Equal("3.6.0", resolvedDependencies[2].Version);
|
591
593
|
}
|
592
594
|
|
593
595
|
// Updating a dependency (Microsoft.Bcl.AsyncInterfaces) of the root package (Azure.Core) will require the root package to also update, but since the dependency is not in the existing list, we do not include it
|
594
|
-
[
|
595
|
-
|
596
|
+
[Theory]
|
597
|
+
[InlineData(true)]
|
598
|
+
[InlineData(false)]
|
599
|
+
public async Task DependencyConflictsCanBeResolvedNewUpdatingNonExistingDependency(bool useExistingSdks)
|
596
600
|
{
|
597
|
-
var
|
601
|
+
using var tempDirectory = new TemporaryDirectory();
|
602
|
+
var projectPath = Path.Join(tempDirectory.DirectoryPath, "project.csproj");
|
603
|
+
await File.WriteAllTextAsync(projectPath, """
|
604
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
605
|
+
<PropertyGroup>
|
606
|
+
<TargetFramework>net8.0</TargetFramework>
|
607
|
+
</PropertyGroup>
|
608
|
+
<ItemGroup>
|
609
|
+
<PackageReference Include="Azure.Core" Version="1.21.0" />
|
610
|
+
</ItemGroup>
|
611
|
+
</Project>
|
612
|
+
""");
|
598
613
|
|
599
|
-
|
614
|
+
var dependencies = new[]
|
600
615
|
{
|
601
|
-
|
602
|
-
|
603
|
-
|
604
|
-
<PropertyGroup>
|
605
|
-
<TargetFramework>net8.0</TargetFramework>
|
606
|
-
</PropertyGroup>
|
607
|
-
<ItemGroup>
|
608
|
-
<PackageReference Include="Azure.Core" Version="1.21.0" />
|
609
|
-
</ItemGroup>
|
610
|
-
</Project>
|
611
|
-
""");
|
612
|
-
|
613
|
-
var dependencies = new[]
|
614
|
-
{
|
615
|
-
new Dependency("Azure.Core", "1.21.0", DependencyType.PackageReference)
|
616
|
-
};
|
617
|
-
var update = new[]
|
618
|
-
{
|
619
|
-
new Dependency("Microsoft.Bcl.AsyncInterfaces", "1.1.1", DependencyType.Unknown)
|
620
|
-
};
|
621
|
-
|
622
|
-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
|
623
|
-
Assert.NotNull(resolvedDependencies);
|
624
|
-
Assert.Single(resolvedDependencies);
|
625
|
-
Assert.Equal("Azure.Core", resolvedDependencies[0].Name);
|
626
|
-
Assert.Equal("1.22.0", resolvedDependencies[0].Version);
|
627
|
-
}
|
628
|
-
finally
|
616
|
+
new Dependency("Azure.Core", "1.21.0", DependencyType.PackageReference)
|
617
|
+
};
|
618
|
+
var update = new[]
|
629
619
|
{
|
630
|
-
|
631
|
-
}
|
620
|
+
new Dependency("Microsoft.Bcl.AsyncInterfaces", "1.1.1", DependencyType.Unknown)
|
621
|
+
};
|
622
|
+
|
623
|
+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(
|
624
|
+
tempDirectory.DirectoryPath,
|
625
|
+
projectPath,
|
626
|
+
"net8.0",
|
627
|
+
dependencies,
|
628
|
+
update,
|
629
|
+
new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
|
630
|
+
new TestLogger()
|
631
|
+
);
|
632
|
+
Assert.NotNull(resolvedDependencies);
|
633
|
+
Assert.Single(resolvedDependencies);
|
634
|
+
Assert.Equal("Azure.Core", resolvedDependencies[0].Name);
|
635
|
+
Assert.Equal("1.22.0", resolvedDependencies[0].Version);
|
632
636
|
}
|
633
637
|
|
634
638
|
// Adding a reference
|
635
639
|
// Newtonsoft.Json needs to update to 13.0.1. Although Newtonsoft.Json.Bson can use the original version of 12.0.1, for security vulnerabilities and
|
636
640
|
// because there is no later version of Newtonsoft.Json.Bson 1.0.2, Newtonsoft.Json would be added to the existing list to prevent resolution
|
637
|
-
[
|
638
|
-
|
641
|
+
[Theory]
|
642
|
+
[InlineData(true)]
|
643
|
+
[InlineData(false)]
|
644
|
+
public async Task DependencyConflictsCanBeResolvedNewUpdatingNonExistentDependencyAndKeepingReference(bool useExistingSdks)
|
639
645
|
{
|
640
|
-
var
|
646
|
+
using var tempDirectory = new TemporaryDirectory();
|
647
|
+
var projectPath = Path.Join(tempDirectory.DirectoryPath, "project.csproj");
|
648
|
+
await File.WriteAllTextAsync(projectPath, """
|
649
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
650
|
+
<PropertyGroup>
|
651
|
+
<TargetFramework>net8.0</TargetFramework>
|
652
|
+
</PropertyGroup>
|
653
|
+
<ItemGroup>
|
654
|
+
<PackageReference Include="Newtonsoft.Json.Bson" Version="1.0.2" />
|
655
|
+
</ItemGroup>
|
656
|
+
</Project>
|
657
|
+
""");
|
641
658
|
|
642
|
-
|
659
|
+
var dependencies = new[]
|
643
660
|
{
|
644
|
-
|
645
|
-
|
646
|
-
|
647
|
-
<PropertyGroup>
|
648
|
-
<TargetFramework>net8.0</TargetFramework>
|
649
|
-
</PropertyGroup>
|
650
|
-
<ItemGroup>
|
651
|
-
<PackageReference Include="Newtonsoft.Json.Bson" Version="1.0.2" />
|
652
|
-
</ItemGroup>
|
653
|
-
</Project>
|
654
|
-
""");
|
655
|
-
|
656
|
-
var dependencies = new[]
|
657
|
-
{
|
658
|
-
new Dependency("Newtonsoft.Json.Bson", "1.0.2", DependencyType.PackageReference)
|
659
|
-
};
|
660
|
-
var update = new[]
|
661
|
-
{
|
662
|
-
new Dependency("Newtonsoft.Json", "13.0.1", DependencyType.Unknown)
|
663
|
-
};
|
664
|
-
|
665
|
-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
|
666
|
-
Assert.NotNull(resolvedDependencies);
|
667
|
-
Assert.Equal(2, resolvedDependencies.Length);
|
668
|
-
Assert.Equal("Newtonsoft.Json.Bson", resolvedDependencies[0].Name);
|
669
|
-
Assert.Equal("1.0.2", resolvedDependencies[0].Version);
|
670
|
-
Assert.Equal("Newtonsoft.Json", resolvedDependencies[1].Name);
|
671
|
-
Assert.Equal("13.0.1", resolvedDependencies[1].Version);
|
672
|
-
}
|
673
|
-
finally
|
661
|
+
new Dependency("Newtonsoft.Json.Bson", "1.0.2", DependencyType.PackageReference)
|
662
|
+
};
|
663
|
+
var update = new[]
|
674
664
|
{
|
675
|
-
|
676
|
-
}
|
665
|
+
new Dependency("Newtonsoft.Json", "13.0.1", DependencyType.Unknown)
|
666
|
+
};
|
667
|
+
|
668
|
+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(
|
669
|
+
tempDirectory.DirectoryPath,
|
670
|
+
projectPath,
|
671
|
+
"net8.0",
|
672
|
+
dependencies,
|
673
|
+
update,
|
674
|
+
new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
|
675
|
+
new TestLogger()
|
676
|
+
);
|
677
|
+
Assert.NotNull(resolvedDependencies);
|
678
|
+
Assert.Equal(2, resolvedDependencies.Length);
|
679
|
+
Assert.Equal("Newtonsoft.Json.Bson", resolvedDependencies[0].Name);
|
680
|
+
Assert.Equal("1.0.2", resolvedDependencies[0].Version);
|
681
|
+
Assert.Equal("Newtonsoft.Json", resolvedDependencies[1].Name);
|
682
|
+
Assert.Equal("13.0.1", resolvedDependencies[1].Version);
|
677
683
|
}
|
678
684
|
|
679
685
|
// Updating unreferenced dependency
|
680
686
|
// Root package (Microsoft.CodeAnalysis.Compilers) and its dependencies (Microsoft.CodeAnalysis.CSharp), (Microsoft.CodeAnalysis.VisualBasic) are all 4.9.2
|
681
687
|
// These packages all require the transitive dependency of the root package (Microsoft.CodeAnalysis.Common) to be 4.9.2, but it's not in the existing list
|
682
688
|
// If Microsoft.CodeAnalysis.Common is updated to 4.10.0, everything else updates and Microsoft.CoseAnalysis.Common is not kept in the existing list
|
683
|
-
[
|
684
|
-
|
689
|
+
[Theory]
|
690
|
+
[InlineData(true)]
|
691
|
+
[InlineData(false)]
|
692
|
+
public async Task DependencyConflictsCanBeResolvedNewTransitiveDependencyNotExisting(bool useExistingSdks)
|
685
693
|
{
|
686
|
-
var
|
694
|
+
using var tempDirectory = new TemporaryDirectory();
|
695
|
+
var projectPath = Path.Join(tempDirectory.DirectoryPath, "project.csproj");
|
696
|
+
await File.WriteAllTextAsync(projectPath, """
|
697
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
698
|
+
<PropertyGroup>
|
699
|
+
<TargetFramework>net8.0</TargetFramework>
|
700
|
+
</PropertyGroup>
|
701
|
+
<ItemGroup>
|
702
|
+
<PackageReference Include="Microsoft.CodeAnalysis.Compilers" Version="4.9.2" />
|
703
|
+
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.9.2" />
|
704
|
+
<PackageReference Include="Microsoft.CodeAnalysis.VisualBasic" Version="4.9.2" />
|
705
|
+
</ItemGroup>
|
706
|
+
</Project>
|
707
|
+
""");
|
687
708
|
|
688
|
-
|
709
|
+
var dependencies = new[]
|
689
710
|
{
|
690
|
-
|
691
|
-
|
692
|
-
|
693
|
-
|
694
|
-
|
695
|
-
</PropertyGroup>
|
696
|
-
<ItemGroup>
|
697
|
-
<PackageReference Include="Microsoft.CodeAnalysis.Compilers" Version="4.9.2" />
|
698
|
-
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.9.2" />
|
699
|
-
<PackageReference Include="Microsoft.CodeAnalysis.VisualBasic" Version="4.9.2" />
|
700
|
-
</ItemGroup>
|
701
|
-
</Project>
|
702
|
-
""");
|
703
|
-
|
704
|
-
var dependencies = new[]
|
705
|
-
{
|
706
|
-
new Dependency("Microsoft.CodeAnalysis.Compilers", "4.9.2", DependencyType.PackageReference),
|
707
|
-
new Dependency("Microsoft.CodeAnalysis.CSharp", "4.9.2", DependencyType.PackageReference),
|
708
|
-
new Dependency("Microsoft.CodeAnalysis.VisualBasic", "4.9.2", DependencyType.PackageReference)
|
709
|
-
};
|
710
|
-
var update = new[]
|
711
|
-
{
|
712
|
-
new Dependency("Microsoft.CodeAnalysis.Common", "4.10.0", DependencyType.PackageReference)
|
713
|
-
};
|
714
|
-
|
715
|
-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
|
716
|
-
Assert.NotNull(resolvedDependencies);
|
717
|
-
Assert.Equal(3, resolvedDependencies.Length);
|
718
|
-
Assert.Equal("Microsoft.CodeAnalysis.Compilers", resolvedDependencies[0].Name);
|
719
|
-
Assert.Equal("4.10.0", resolvedDependencies[0].Version);
|
720
|
-
Assert.Equal("Microsoft.CodeAnalysis.CSharp", resolvedDependencies[1].Name);
|
721
|
-
Assert.Equal("4.10.0", resolvedDependencies[1].Version);
|
722
|
-
Assert.Equal("Microsoft.CodeAnalysis.VisualBasic", resolvedDependencies[2].Name);
|
723
|
-
Assert.Equal("4.10.0", resolvedDependencies[2].Version);
|
724
|
-
}
|
725
|
-
finally
|
711
|
+
new Dependency("Microsoft.CodeAnalysis.Compilers", "4.9.2", DependencyType.PackageReference),
|
712
|
+
new Dependency("Microsoft.CodeAnalysis.CSharp", "4.9.2", DependencyType.PackageReference),
|
713
|
+
new Dependency("Microsoft.CodeAnalysis.VisualBasic", "4.9.2", DependencyType.PackageReference)
|
714
|
+
};
|
715
|
+
var update = new[]
|
726
716
|
{
|
727
|
-
|
728
|
-
}
|
717
|
+
new Dependency("Microsoft.CodeAnalysis.Common", "4.10.0", DependencyType.PackageReference)
|
718
|
+
};
|
719
|
+
|
720
|
+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(
|
721
|
+
tempDirectory.DirectoryPath,
|
722
|
+
projectPath,
|
723
|
+
"net8.0",
|
724
|
+
dependencies,
|
725
|
+
update,
|
726
|
+
new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
|
727
|
+
new TestLogger()
|
728
|
+
);
|
729
|
+
Assert.NotNull(resolvedDependencies);
|
730
|
+
Assert.Equal(3, resolvedDependencies.Length);
|
731
|
+
Assert.Equal("Microsoft.CodeAnalysis.Compilers", resolvedDependencies[0].Name);
|
732
|
+
Assert.Equal("4.10.0", resolvedDependencies[0].Version);
|
733
|
+
Assert.Equal("Microsoft.CodeAnalysis.CSharp", resolvedDependencies[1].Name);
|
734
|
+
Assert.Equal("4.10.0", resolvedDependencies[1].Version);
|
735
|
+
Assert.Equal("Microsoft.CodeAnalysis.VisualBasic", resolvedDependencies[2].Name);
|
736
|
+
Assert.Equal("4.10.0", resolvedDependencies[2].Version);
|
729
737
|
}
|
730
738
|
|
731
739
|
// Updating referenced dependency
|
732
740
|
// The same as previous test, but the transitive dependency (Microsoft.CodeAnalysis.Common) is in the existing list
|
733
|
-
[
|
734
|
-
|
741
|
+
[Theory]
|
742
|
+
[InlineData(true)]
|
743
|
+
[InlineData(false)]
|
744
|
+
public async Task DependencyConflictsCanBeResolvedNewSingleTransitiveDependencyExisting(bool useExistingSdks)
|
735
745
|
{
|
736
|
-
var
|
746
|
+
using var tempDirectory = new TemporaryDirectory();
|
747
|
+
var projectPath = Path.Join(tempDirectory.DirectoryPath, "project.csproj");
|
748
|
+
await File.WriteAllTextAsync(projectPath, """
|
749
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
750
|
+
<PropertyGroup>
|
751
|
+
<TargetFramework>net8.0</TargetFramework>
|
752
|
+
</PropertyGroup>
|
753
|
+
<ItemGroup>
|
754
|
+
<PackageReference Include="Microsoft.CodeAnalysis.Compilers" Version="4.9.2" />
|
755
|
+
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="4.9.2" />
|
756
|
+
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.9.2" />
|
757
|
+
<PackageReference Include="Microsoft.CodeAnalysis.VisualBasic" Version="4.9.2" />
|
758
|
+
</ItemGroup>
|
759
|
+
</Project>
|
760
|
+
""");
|
737
761
|
|
738
|
-
|
762
|
+
var dependencies = new[]
|
739
763
|
{
|
740
|
-
|
741
|
-
|
742
|
-
|
743
|
-
|
744
|
-
|
745
|
-
|
746
|
-
<ItemGroup>
|
747
|
-
<PackageReference Include="Microsoft.CodeAnalysis.Compilers" Version="4.9.2" />
|
748
|
-
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="4.9.2" />
|
749
|
-
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.9.2" />
|
750
|
-
<PackageReference Include="Microsoft.CodeAnalysis.VisualBasic" Version="4.9.2" />
|
751
|
-
</ItemGroup>
|
752
|
-
</Project>
|
753
|
-
""");
|
754
|
-
|
755
|
-
var dependencies = new[]
|
756
|
-
{
|
757
|
-
new Dependency("Microsoft.CodeAnalysis.Compilers", "4.9.2", DependencyType.PackageReference),
|
758
|
-
new Dependency("Microsoft.CodeAnalysis.Common", "4.9.2", DependencyType.PackageReference),
|
759
|
-
new Dependency("Microsoft.CodeAnalysis.CSharp", "4.9.2", DependencyType.PackageReference),
|
760
|
-
new Dependency("Microsoft.CodeAnalysis.VisualBasic", "4.9.2", DependencyType.PackageReference)
|
761
|
-
};
|
762
|
-
var update = new[]
|
763
|
-
{
|
764
|
-
new Dependency("Microsoft.CodeAnalysis.Common", "4.10.0", DependencyType.PackageReference)
|
765
|
-
};
|
766
|
-
|
767
|
-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
|
768
|
-
Assert.NotNull(resolvedDependencies);
|
769
|
-
Assert.Equal(4, resolvedDependencies.Length);
|
770
|
-
Assert.Equal("Microsoft.CodeAnalysis.Compilers", resolvedDependencies[0].Name);
|
771
|
-
Assert.Equal("4.10.0", resolvedDependencies[0].Version);
|
772
|
-
Assert.Equal("Microsoft.CodeAnalysis.Common", resolvedDependencies[1].Name);
|
773
|
-
Assert.Equal("4.10.0", resolvedDependencies[1].Version);
|
774
|
-
Assert.Equal("Microsoft.CodeAnalysis.CSharp", resolvedDependencies[2].Name);
|
775
|
-
Assert.Equal("4.10.0", resolvedDependencies[2].Version);
|
776
|
-
Assert.Equal("Microsoft.CodeAnalysis.VisualBasic", resolvedDependencies[3].Name);
|
777
|
-
Assert.Equal("4.10.0", resolvedDependencies[3].Version);
|
778
|
-
}
|
779
|
-
finally
|
764
|
+
new Dependency("Microsoft.CodeAnalysis.Compilers", "4.9.2", DependencyType.PackageReference),
|
765
|
+
new Dependency("Microsoft.CodeAnalysis.Common", "4.9.2", DependencyType.PackageReference),
|
766
|
+
new Dependency("Microsoft.CodeAnalysis.CSharp", "4.9.2", DependencyType.PackageReference),
|
767
|
+
new Dependency("Microsoft.CodeAnalysis.VisualBasic", "4.9.2", DependencyType.PackageReference)
|
768
|
+
};
|
769
|
+
var update = new[]
|
780
770
|
{
|
781
|
-
|
782
|
-
}
|
771
|
+
new Dependency("Microsoft.CodeAnalysis.Common", "4.10.0", DependencyType.PackageReference)
|
772
|
+
};
|
773
|
+
|
774
|
+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(
|
775
|
+
tempDirectory.DirectoryPath,
|
776
|
+
projectPath,
|
777
|
+
"net8.0",
|
778
|
+
dependencies,
|
779
|
+
update,
|
780
|
+
new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
|
781
|
+
new TestLogger()
|
782
|
+
);
|
783
|
+
Assert.NotNull(resolvedDependencies);
|
784
|
+
Assert.Equal(4, resolvedDependencies.Length);
|
785
|
+
Assert.Equal("Microsoft.CodeAnalysis.Compilers", resolvedDependencies[0].Name);
|
786
|
+
Assert.Equal("4.10.0", resolvedDependencies[0].Version);
|
787
|
+
Assert.Equal("Microsoft.CodeAnalysis.Common", resolvedDependencies[1].Name);
|
788
|
+
Assert.Equal("4.10.0", resolvedDependencies[1].Version);
|
789
|
+
Assert.Equal("Microsoft.CodeAnalysis.CSharp", resolvedDependencies[2].Name);
|
790
|
+
Assert.Equal("4.10.0", resolvedDependencies[2].Version);
|
791
|
+
Assert.Equal("Microsoft.CodeAnalysis.VisualBasic", resolvedDependencies[3].Name);
|
792
|
+
Assert.Equal("4.10.0", resolvedDependencies[3].Version);
|
783
793
|
}
|
784
794
|
|
785
795
|
// A combination of the third and fourth test, to measure efficiency of updating separate families
|
786
796
|
// Keeping a dependency that was not included in the original list (Newtonsoft.Json)
|
787
797
|
// Not keeping a dependency that was not included in the original list (Microsoft.CodeAnalysis.Common)
|
788
|
-
[
|
789
|
-
|
798
|
+
[Theory]
|
799
|
+
[InlineData(true)]
|
800
|
+
[InlineData(false)]
|
801
|
+
public async Task DependencyConflictsCanBeResolvedNewSelectiveAdditionPackages(bool useExistingSdks)
|
790
802
|
{
|
791
|
-
var
|
803
|
+
using var tempDirectory = new TemporaryDirectory();
|
804
|
+
var projectPath = Path.Join(tempDirectory.DirectoryPath, "project.csproj");
|
805
|
+
await File.WriteAllTextAsync(projectPath, """
|
806
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
807
|
+
<PropertyGroup>
|
808
|
+
<TargetFramework>net8.0</TargetFramework>
|
809
|
+
</PropertyGroup>
|
810
|
+
<ItemGroup>
|
811
|
+
<PackageReference Include="Microsoft.CodeAnalysis.Compilers" Version="4.9.2" />
|
812
|
+
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.9.2" />
|
813
|
+
<PackageReference Include="Microsoft.CodeAnalysis.VisualBasic" Version="4.9.2" />
|
814
|
+
<PackageReference Include="Newtonsoft.Json.Bson" Version="1.0.2" />
|
815
|
+
</ItemGroup>
|
816
|
+
</Project>
|
817
|
+
""");
|
792
818
|
|
793
|
-
|
819
|
+
var dependencies = new[]
|
794
820
|
{
|
795
|
-
|
796
|
-
|
797
|
-
|
798
|
-
|
799
|
-
|
800
|
-
|
801
|
-
<ItemGroup>
|
802
|
-
<PackageReference Include="Microsoft.CodeAnalysis.Compilers" Version="4.9.2" />
|
803
|
-
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.9.2" />
|
804
|
-
<PackageReference Include="Microsoft.CodeAnalysis.VisualBasic" Version="4.9.2" />
|
805
|
-
<PackageReference Include="Newtonsoft.Json.Bson" Version="1.0.2" />
|
806
|
-
</ItemGroup>
|
807
|
-
</Project>
|
808
|
-
""");
|
809
|
-
|
810
|
-
var dependencies = new[]
|
811
|
-
{
|
812
|
-
new Dependency("Microsoft.CodeAnalysis.Compilers", "4.9.2", DependencyType.PackageReference),
|
813
|
-
new Dependency("Microsoft.CodeAnalysis.CSharp", "4.9.2", DependencyType.PackageReference),
|
814
|
-
new Dependency("Microsoft.CodeAnalysis.VisualBasic", "4.9.2", DependencyType.PackageReference),
|
815
|
-
new Dependency("Newtonsoft.Json.Bson", "1.0.2", DependencyType.PackageReference)
|
816
|
-
};
|
817
|
-
var update = new[]
|
818
|
-
{
|
819
|
-
new Dependency("Microsoft.CodeAnalysis.Common", "4.10.0", DependencyType.PackageReference),
|
820
|
-
new Dependency("Newtonsoft.Json", "13.0.1", DependencyType.Unknown)
|
821
|
-
};
|
822
|
-
|
823
|
-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
|
824
|
-
Assert.NotNull(resolvedDependencies);
|
825
|
-
Assert.Equal(5, resolvedDependencies.Length);
|
826
|
-
Assert.Equal("Microsoft.CodeAnalysis.Compilers", resolvedDependencies[0].Name);
|
827
|
-
Assert.Equal("4.10.0", resolvedDependencies[0].Version);
|
828
|
-
Assert.Equal("Microsoft.CodeAnalysis.CSharp", resolvedDependencies[1].Name);
|
829
|
-
Assert.Equal("4.10.0", resolvedDependencies[1].Version);
|
830
|
-
Assert.Equal("Microsoft.CodeAnalysis.VisualBasic", resolvedDependencies[2].Name);
|
831
|
-
Assert.Equal("4.10.0", resolvedDependencies[2].Version);
|
832
|
-
Assert.Equal("Newtonsoft.Json.Bson", resolvedDependencies[3].Name);
|
833
|
-
Assert.Equal("1.0.2", resolvedDependencies[3].Version);
|
834
|
-
Assert.Equal("Newtonsoft.Json", resolvedDependencies[4].Name);
|
835
|
-
Assert.Equal("13.0.1", resolvedDependencies[4].Version);
|
836
|
-
}
|
837
|
-
finally
|
821
|
+
new Dependency("Microsoft.CodeAnalysis.Compilers", "4.9.2", DependencyType.PackageReference),
|
822
|
+
new Dependency("Microsoft.CodeAnalysis.CSharp", "4.9.2", DependencyType.PackageReference),
|
823
|
+
new Dependency("Microsoft.CodeAnalysis.VisualBasic", "4.9.2", DependencyType.PackageReference),
|
824
|
+
new Dependency("Newtonsoft.Json.Bson", "1.0.2", DependencyType.PackageReference)
|
825
|
+
};
|
826
|
+
var update = new[]
|
838
827
|
{
|
839
|
-
|
840
|
-
|
828
|
+
new Dependency("Microsoft.CodeAnalysis.Common", "4.10.0", DependencyType.PackageReference),
|
829
|
+
new Dependency("Newtonsoft.Json", "13.0.1", DependencyType.Unknown)
|
830
|
+
};
|
831
|
+
|
832
|
+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(
|
833
|
+
tempDirectory.DirectoryPath,
|
834
|
+
projectPath,
|
835
|
+
"net8.0",
|
836
|
+
dependencies,
|
837
|
+
update,
|
838
|
+
new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
|
839
|
+
new TestLogger()
|
840
|
+
);
|
841
|
+
Assert.NotNull(resolvedDependencies);
|
842
|
+
Assert.Equal(5, resolvedDependencies.Length);
|
843
|
+
Assert.Equal("Microsoft.CodeAnalysis.Compilers", resolvedDependencies[0].Name);
|
844
|
+
Assert.Equal("4.10.0", resolvedDependencies[0].Version);
|
845
|
+
Assert.Equal("Microsoft.CodeAnalysis.CSharp", resolvedDependencies[1].Name);
|
846
|
+
Assert.Equal("4.10.0", resolvedDependencies[1].Version);
|
847
|
+
Assert.Equal("Microsoft.CodeAnalysis.VisualBasic", resolvedDependencies[2].Name);
|
848
|
+
Assert.Equal("4.10.0", resolvedDependencies[2].Version);
|
849
|
+
Assert.Equal("Newtonsoft.Json.Bson", resolvedDependencies[3].Name);
|
850
|
+
Assert.Equal("1.0.2", resolvedDependencies[3].Version);
|
851
|
+
Assert.Equal("Newtonsoft.Json", resolvedDependencies[4].Name);
|
852
|
+
Assert.Equal("13.0.1", resolvedDependencies[4].Version);
|
841
853
|
}
|
842
854
|
|
843
855
|
// Two top level packages (Buildalyzer), (Microsoft.CodeAnalysis.CSharp.Scripting) that share a dependency (Microsoft.CodeAnalysis.Csharp)
|
@@ -845,476 +857,494 @@ public class MSBuildHelperTests : TestBase
|
|
845
857
|
// First family: Buildalyzer 7.0.1 requires Microsoft.CodeAnalysis.CSharp to be >= 4.0.0 and Microsoft.CodeAnalysis.Common to be 4.0.0 (@ 6.0.4, Microsoft.CodeAnalysis.Common isn't a dependency of buildalyzer)
|
846
858
|
// Second family: Microsoft.CodeAnalysis.CSharp.Scripting 4.0.0 requires Microsoft.CodeAnalysis.CSharp 4.0.0 and Microsoft.CodeAnalysis.Common to be 4.0.0 (Specific version)
|
847
859
|
// Updating Buildalyzer to 7.0.1 will update its transitive dependency (Microsoft.CodeAnalysis.Common) and then its transitive dependency's "family"
|
848
|
-
[
|
849
|
-
|
860
|
+
[Theory]
|
861
|
+
[InlineData(true)]
|
862
|
+
[InlineData(false)]
|
863
|
+
public async Task DependencyConflictsCanBeResolvedNewSharingDependency(bool useExistingSdks)
|
850
864
|
{
|
851
|
-
var
|
865
|
+
using var tempDirectory = new TemporaryDirectory();
|
866
|
+
var projectPath = Path.Join(tempDirectory.DirectoryPath, "project.csproj");
|
867
|
+
await File.WriteAllTextAsync(projectPath, """
|
868
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
869
|
+
<PropertyGroup>
|
870
|
+
<TargetFramework>net8.0</TargetFramework>
|
871
|
+
</PropertyGroup>
|
872
|
+
<ItemGroup>
|
873
|
+
<PackageReference Include="Buildalyzer" Version="6.0.4" />
|
874
|
+
<PackageReference Include="Microsoft.CodeAnalysis.Csharp.Scripting" Version="3.10.0" />
|
875
|
+
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.10.0" />
|
876
|
+
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="3.10.0" />
|
877
|
+
</ItemGroup>
|
878
|
+
</Project>
|
879
|
+
""");
|
852
880
|
|
853
|
-
|
881
|
+
var dependencies = new[]
|
854
882
|
{
|
855
|
-
|
856
|
-
|
857
|
-
|
858
|
-
|
859
|
-
|
860
|
-
|
861
|
-
<ItemGroup>
|
862
|
-
<PackageReference Include="Buildalyzer" Version="6.0.4" />
|
863
|
-
<PackageReference Include="Microsoft.CodeAnalysis.Csharp.Scripting" Version="3.10.0" />
|
864
|
-
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.10.0" />
|
865
|
-
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="3.10.0" />
|
866
|
-
</ItemGroup>
|
867
|
-
</Project>
|
868
|
-
""");
|
869
|
-
|
870
|
-
var dependencies = new[]
|
871
|
-
{
|
872
|
-
new Dependency("Buildalyzer", "6.0.4", DependencyType.PackageReference),
|
873
|
-
new Dependency("Microsoft.CodeAnalysis.CSharp.Scripting", "3.10.0", DependencyType.PackageReference),
|
874
|
-
new Dependency("Microsoft.CodeAnalysis.CSharp", "3.10.0", DependencyType.PackageReference),
|
875
|
-
new Dependency("Microsoft.CodeAnalysis.Common", "3.10.0", DependencyType.PackageReference),
|
876
|
-
};
|
877
|
-
var update = new[]
|
878
|
-
{
|
879
|
-
new Dependency("Buildalyzer", "7.0.1", DependencyType.PackageReference),
|
880
|
-
};
|
881
|
-
|
882
|
-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
|
883
|
-
Assert.NotNull(resolvedDependencies);
|
884
|
-
Assert.Equal(4, resolvedDependencies.Length);
|
885
|
-
Assert.Equal("Buildalyzer", resolvedDependencies[0].Name);
|
886
|
-
Assert.Equal("7.0.1", resolvedDependencies[0].Version);
|
887
|
-
Assert.Equal("Microsoft.CodeAnalysis.CSharp.Scripting", resolvedDependencies[1].Name);
|
888
|
-
Assert.Equal("4.0.0", resolvedDependencies[1].Version);
|
889
|
-
Assert.Equal("Microsoft.CodeAnalysis.CSharp", resolvedDependencies[2].Name);
|
890
|
-
Assert.Equal("4.0.0", resolvedDependencies[2].Version);
|
891
|
-
Assert.Equal("Microsoft.CodeAnalysis.Common", resolvedDependencies[3].Name);
|
892
|
-
Assert.Equal("4.0.0", resolvedDependencies[3].Version);
|
893
|
-
}
|
894
|
-
finally
|
883
|
+
new Dependency("Buildalyzer", "6.0.4", DependencyType.PackageReference),
|
884
|
+
new Dependency("Microsoft.CodeAnalysis.CSharp.Scripting", "3.10.0", DependencyType.PackageReference),
|
885
|
+
new Dependency("Microsoft.CodeAnalysis.CSharp", "3.10.0", DependencyType.PackageReference),
|
886
|
+
new Dependency("Microsoft.CodeAnalysis.Common", "3.10.0", DependencyType.PackageReference),
|
887
|
+
};
|
888
|
+
var update = new[]
|
895
889
|
{
|
896
|
-
|
897
|
-
}
|
890
|
+
new Dependency("Buildalyzer", "7.0.1", DependencyType.PackageReference),
|
891
|
+
};
|
892
|
+
|
893
|
+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(
|
894
|
+
tempDirectory.DirectoryPath,
|
895
|
+
projectPath,
|
896
|
+
"net8.0",
|
897
|
+
dependencies,
|
898
|
+
update,
|
899
|
+
new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
|
900
|
+
new TestLogger()
|
901
|
+
);
|
902
|
+
Assert.NotNull(resolvedDependencies);
|
903
|
+
Assert.Equal(4, resolvedDependencies.Length);
|
904
|
+
Assert.Equal("Buildalyzer", resolvedDependencies[0].Name);
|
905
|
+
Assert.Equal("7.0.1", resolvedDependencies[0].Version);
|
906
|
+
Assert.Equal("Microsoft.CodeAnalysis.CSharp.Scripting", resolvedDependencies[1].Name);
|
907
|
+
Assert.Equal("4.0.0", resolvedDependencies[1].Version);
|
908
|
+
Assert.Equal("Microsoft.CodeAnalysis.CSharp", resolvedDependencies[2].Name);
|
909
|
+
Assert.Equal("4.0.0", resolvedDependencies[2].Version);
|
910
|
+
Assert.Equal("Microsoft.CodeAnalysis.Common", resolvedDependencies[3].Name);
|
911
|
+
Assert.Equal("4.0.0", resolvedDependencies[3].Version);
|
898
912
|
}
|
899
913
|
|
900
914
|
// Updating two families at once to test efficiency
|
901
915
|
// First family: Direct dependency (Microsoft.CodeAnalysis.Common) needs to be updated, which will then need to update in the existing list its dependency (System.Collections.Immutable) and "parent" (Microsoft.CodeAnalysis.Csharp.Scripting)
|
902
916
|
// Second family: Updating the root package (Azure.Core) in the existing list will also need to update its dependency (Microsoft.Bcl.AsyncInterfaces)
|
903
|
-
[
|
904
|
-
|
917
|
+
[Theory]
|
918
|
+
[InlineData(true)]
|
919
|
+
[InlineData(false)]
|
920
|
+
public async Task DependencyConflictsCanBeResolvedNewUpdatingEntireFamily(bool useExistingSdks)
|
905
921
|
{
|
906
|
-
var
|
922
|
+
using var tempDirectory = new TemporaryDirectory();
|
923
|
+
var projectPath = Path.Join(tempDirectory.DirectoryPath, "project.csproj");
|
924
|
+
await File.WriteAllTextAsync(projectPath, """
|
925
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
926
|
+
<PropertyGroup>
|
927
|
+
<TargetFramework>net8.0</TargetFramework>
|
928
|
+
</PropertyGroup>
|
929
|
+
<ItemGroup>
|
930
|
+
<PackageReference Include="System.Collections.Immutable" Version="7.0.0" />
|
931
|
+
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.8.0" />
|
932
|
+
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="1.0.0" />
|
933
|
+
<PackageReference Include="Azure.Core" Version="1.21.0" />
|
934
|
+
</ItemGroup>
|
935
|
+
</Project>
|
936
|
+
""");
|
907
937
|
|
908
|
-
|
938
|
+
var dependencies = new[]
|
909
939
|
{
|
910
|
-
|
911
|
-
|
912
|
-
|
913
|
-
|
914
|
-
<TargetFramework>net8.0</TargetFramework>
|
915
|
-
</PropertyGroup>
|
916
|
-
<ItemGroup>
|
917
|
-
<PackageReference Include="System.Collections.Immutable" Version="7.0.0" />
|
918
|
-
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.8.0" />
|
919
|
-
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="1.0.0" />
|
920
|
-
<PackageReference Include="Azure.Core" Version="1.21.0" />
|
921
|
-
</ItemGroup>
|
922
|
-
</Project>
|
923
|
-
""");
|
940
|
+
new Dependency("System.Collections.Immutable", "7.0.0", DependencyType.PackageReference),
|
941
|
+
new Dependency("Microsoft.CodeAnalysis.CSharp.Scripting", "4.8.0", DependencyType.PackageReference),
|
942
|
+
new Dependency("Microsoft.Bcl.AsyncInterfaces", "1.0.0", DependencyType.Unknown),
|
943
|
+
new Dependency("Azure.Core", "1.21.0", DependencyType.PackageReference),
|
924
944
|
|
925
|
-
|
926
|
-
|
927
|
-
new Dependency("System.Collections.Immutable", "7.0.0", DependencyType.PackageReference),
|
928
|
-
new Dependency("Microsoft.CodeAnalysis.CSharp.Scripting", "4.8.0", DependencyType.PackageReference),
|
929
|
-
new Dependency("Microsoft.Bcl.AsyncInterfaces", "1.0.0", DependencyType.Unknown),
|
930
|
-
new Dependency("Azure.Core", "1.21.0", DependencyType.PackageReference),
|
931
|
-
|
932
|
-
};
|
933
|
-
var update = new[]
|
934
|
-
{
|
935
|
-
new Dependency("Microsoft.CodeAnalysis.Common", "4.10.0", DependencyType.PackageReference),
|
936
|
-
new Dependency("Azure.Core", "1.22.0", DependencyType.PackageReference)
|
937
|
-
};
|
938
|
-
|
939
|
-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
|
940
|
-
Assert.NotNull(resolvedDependencies);
|
941
|
-
Assert.Equal(4, resolvedDependencies.Length);
|
942
|
-
Assert.Equal("System.Collections.Immutable", resolvedDependencies[0].Name);
|
943
|
-
Assert.Equal("8.0.0", resolvedDependencies[0].Version);
|
944
|
-
Assert.Equal("Microsoft.CodeAnalysis.CSharp.Scripting", resolvedDependencies[1].Name);
|
945
|
-
Assert.Equal("4.10.0", resolvedDependencies[1].Version);
|
946
|
-
Assert.Equal("Microsoft.Bcl.AsyncInterfaces", resolvedDependencies[2].Name);
|
947
|
-
Assert.Equal("1.1.1", resolvedDependencies[2].Version);
|
948
|
-
Assert.Equal("Azure.Core", resolvedDependencies[3].Name);
|
949
|
-
Assert.Equal("1.22.0", resolvedDependencies[3].Version);
|
950
|
-
}
|
951
|
-
finally
|
945
|
+
};
|
946
|
+
var update = new[]
|
952
947
|
{
|
953
|
-
|
954
|
-
|
948
|
+
new Dependency("Microsoft.CodeAnalysis.Common", "4.10.0", DependencyType.PackageReference),
|
949
|
+
new Dependency("Azure.Core", "1.22.0", DependencyType.PackageReference)
|
950
|
+
};
|
951
|
+
|
952
|
+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(
|
953
|
+
tempDirectory.DirectoryPath,
|
954
|
+
projectPath,
|
955
|
+
"net8.0",
|
956
|
+
dependencies,
|
957
|
+
update,
|
958
|
+
new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
|
959
|
+
new TestLogger()
|
960
|
+
);
|
961
|
+
Assert.NotNull(resolvedDependencies);
|
962
|
+
Assert.Equal(4, resolvedDependencies.Length);
|
963
|
+
Assert.Equal("System.Collections.Immutable", resolvedDependencies[0].Name);
|
964
|
+
Assert.Equal("8.0.0", resolvedDependencies[0].Version);
|
965
|
+
Assert.Equal("Microsoft.CodeAnalysis.CSharp.Scripting", resolvedDependencies[1].Name);
|
966
|
+
Assert.Equal("4.10.0", resolvedDependencies[1].Version);
|
967
|
+
Assert.Equal("Microsoft.Bcl.AsyncInterfaces", resolvedDependencies[2].Name);
|
968
|
+
Assert.Equal("1.1.1", resolvedDependencies[2].Version);
|
969
|
+
Assert.Equal("Azure.Core", resolvedDependencies[3].Name);
|
970
|
+
Assert.Equal("1.22.0", resolvedDependencies[3].Version);
|
955
971
|
}
|
956
972
|
|
957
973
|
// Similar to the last test, except Microsoft.CodeAnalysis.Common is in the existing list
|
958
|
-
[
|
959
|
-
|
974
|
+
[Theory]
|
975
|
+
[InlineData(true)]
|
976
|
+
[InlineData(false)]
|
977
|
+
public async Task DependencyConflictsCanBeResolvedNewUpdatingTopLevelAndDependency(bool useExistingSdks)
|
960
978
|
{
|
961
|
-
var
|
979
|
+
using var tempDirectory = new TemporaryDirectory();
|
980
|
+
var projectPath = Path.Join(tempDirectory.DirectoryPath, "project.csproj");
|
981
|
+
await File.WriteAllTextAsync(projectPath, """
|
982
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
983
|
+
<PropertyGroup>
|
984
|
+
<TargetFramework>net8.0</TargetFramework>
|
985
|
+
</PropertyGroup>
|
986
|
+
<ItemGroup>
|
987
|
+
<PackageReference Include="System.Collections.Immutable" Version="7.0.0" />
|
988
|
+
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.8.0" />
|
989
|
+
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="4.8.0" />
|
990
|
+
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="1.0.0" />
|
991
|
+
<PackageReference Include="Azure.Core" Version="1.21.0" />
|
992
|
+
</ItemGroup>
|
993
|
+
</Project>
|
994
|
+
""");
|
962
995
|
|
963
|
-
|
996
|
+
var dependencies = new[]
|
964
997
|
{
|
965
|
-
|
966
|
-
|
967
|
-
|
968
|
-
|
969
|
-
|
970
|
-
</PropertyGroup>
|
971
|
-
<ItemGroup>
|
972
|
-
<PackageReference Include="System.Collections.Immutable" Version="7.0.0" />
|
973
|
-
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Scripting" Version="4.8.0" />
|
974
|
-
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="4.8.0" />
|
975
|
-
<PackageReference Include="Microsoft.Bcl.AsyncInterfaces" Version="1.0.0" />
|
976
|
-
<PackageReference Include="Azure.Core" Version="1.21.0" />
|
977
|
-
</ItemGroup>
|
978
|
-
</Project>
|
979
|
-
""");
|
980
|
-
|
981
|
-
var dependencies = new[]
|
982
|
-
{
|
983
|
-
new Dependency("System.Collections.Immutable", "7.0.0", DependencyType.PackageReference),
|
984
|
-
new Dependency("Microsoft.CodeAnalysis.CSharp.Scripting", "4.8.0", DependencyType.PackageReference),
|
985
|
-
new Dependency("Microsoft.CodeAnalysis.Common", "4.8.0", DependencyType.PackageReference),
|
986
|
-
new Dependency("Microsoft.Bcl.AsyncInterfaces", "1.0.0", DependencyType.Unknown),
|
987
|
-
new Dependency("Azure.Core", "1.21.0", DependencyType.PackageReference),
|
988
|
-
|
989
|
-
};
|
990
|
-
var update = new[]
|
991
|
-
{
|
992
|
-
new Dependency("Microsoft.CodeAnalysis.Common", "4.10.0", DependencyType.PackageReference),
|
993
|
-
new Dependency("Azure.Core", "1.22.0", DependencyType.PackageReference)
|
994
|
-
};
|
998
|
+
new Dependency("System.Collections.Immutable", "7.0.0", DependencyType.PackageReference),
|
999
|
+
new Dependency("Microsoft.CodeAnalysis.CSharp.Scripting", "4.8.0", DependencyType.PackageReference),
|
1000
|
+
new Dependency("Microsoft.CodeAnalysis.Common", "4.8.0", DependencyType.PackageReference),
|
1001
|
+
new Dependency("Microsoft.Bcl.AsyncInterfaces", "1.0.0", DependencyType.Unknown),
|
1002
|
+
new Dependency("Azure.Core", "1.21.0", DependencyType.PackageReference),
|
995
1003
|
|
996
|
-
|
997
|
-
|
998
|
-
Assert.Equal(5, resolvedDependencies.Length);
|
999
|
-
Assert.Equal("System.Collections.Immutable", resolvedDependencies[0].Name);
|
1000
|
-
Assert.Equal("8.0.0", resolvedDependencies[0].Version);
|
1001
|
-
Assert.Equal("Microsoft.CodeAnalysis.CSharp.Scripting", resolvedDependencies[1].Name);
|
1002
|
-
Assert.Equal("4.10.0", resolvedDependencies[1].Version);
|
1003
|
-
Assert.Equal("Microsoft.CodeAnalysis.Common", resolvedDependencies[2].Name);
|
1004
|
-
Assert.Equal("4.10.0", resolvedDependencies[2].Version);
|
1005
|
-
Assert.Equal("Microsoft.Bcl.AsyncInterfaces", resolvedDependencies[3].Name);
|
1006
|
-
Assert.Equal("1.1.1", resolvedDependencies[3].Version);
|
1007
|
-
Assert.Equal("Azure.Core", resolvedDependencies[4].Name);
|
1008
|
-
Assert.Equal("1.22.0", resolvedDependencies[4].Version);
|
1009
|
-
}
|
1010
|
-
finally
|
1004
|
+
};
|
1005
|
+
var update = new[]
|
1011
1006
|
{
|
1012
|
-
|
1013
|
-
|
1007
|
+
new Dependency("Microsoft.CodeAnalysis.Common", "4.10.0", DependencyType.PackageReference),
|
1008
|
+
new Dependency("Azure.Core", "1.22.0", DependencyType.PackageReference)
|
1009
|
+
};
|
1010
|
+
|
1011
|
+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(
|
1012
|
+
tempDirectory.DirectoryPath,
|
1013
|
+
projectPath,
|
1014
|
+
"net8.0",
|
1015
|
+
dependencies,
|
1016
|
+
update,
|
1017
|
+
new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
|
1018
|
+
new TestLogger()
|
1019
|
+
);
|
1020
|
+
Assert.NotNull(resolvedDependencies);
|
1021
|
+
Assert.Equal(5, resolvedDependencies.Length);
|
1022
|
+
Assert.Equal("System.Collections.Immutable", resolvedDependencies[0].Name);
|
1023
|
+
Assert.Equal("8.0.0", resolvedDependencies[0].Version);
|
1024
|
+
Assert.Equal("Microsoft.CodeAnalysis.CSharp.Scripting", resolvedDependencies[1].Name);
|
1025
|
+
Assert.Equal("4.10.0", resolvedDependencies[1].Version);
|
1026
|
+
Assert.Equal("Microsoft.CodeAnalysis.Common", resolvedDependencies[2].Name);
|
1027
|
+
Assert.Equal("4.10.0", resolvedDependencies[2].Version);
|
1028
|
+
Assert.Equal("Microsoft.Bcl.AsyncInterfaces", resolvedDependencies[3].Name);
|
1029
|
+
Assert.Equal("1.1.1", resolvedDependencies[3].Version);
|
1030
|
+
Assert.Equal("Azure.Core", resolvedDependencies[4].Name);
|
1031
|
+
Assert.Equal("1.22.0", resolvedDependencies[4].Version);
|
1014
1032
|
}
|
1015
1033
|
|
1016
1034
|
// Out of scope test: AutoMapper.Extensions.Microsoft.DependencyInjection's versions are not yet compatible
|
1017
1035
|
// To update root package (AutoMapper.Collection) to 10.0.0, its dependency (AutoMapper) needs to update to 13.0.0.
|
1018
1036
|
// However, there is no higher version of AutoMapper's other "parent" (AutoMapper.Extensions.Microsoft.DependencyInjection) that is compatible with the new version
|
1019
|
-
[
|
1020
|
-
|
1037
|
+
[Theory]
|
1038
|
+
[InlineData(true)]
|
1039
|
+
[InlineData(false)]
|
1040
|
+
public async Task DependencyConflictsCanBeResolvedNewOutOfScope(bool useExistingSdks)
|
1021
1041
|
{
|
1022
|
-
var
|
1042
|
+
using var tempDirectory = new TemporaryDirectory();
|
1043
|
+
var projectPath = Path.Join(tempDirectory.DirectoryPath, "project.csproj");
|
1044
|
+
await File.WriteAllTextAsync(projectPath, """
|
1045
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
1046
|
+
<PropertyGroup>
|
1047
|
+
<TargetFramework>net8.0</TargetFramework>
|
1048
|
+
</PropertyGroup>
|
1049
|
+
<ItemGroup>
|
1050
|
+
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" />
|
1051
|
+
<PackageReference Include="AutoMapper" Version="12.0.1" />
|
1052
|
+
<PackageReference Include="AutoMapper.Collection" Version="9.0.0" />
|
1053
|
+
</ItemGroup>
|
1054
|
+
</Project>
|
1055
|
+
""");
|
1023
1056
|
|
1024
|
-
|
1057
|
+
var dependencies = new[]
|
1025
1058
|
{
|
1026
|
-
|
1027
|
-
|
1028
|
-
|
1029
|
-
|
1030
|
-
|
1031
|
-
</PropertyGroup>
|
1032
|
-
<ItemGroup>
|
1033
|
-
<PackageReference Include="AutoMapper.Extensions.Microsoft.DependencyInjection" Version="12.0.1" />
|
1034
|
-
<PackageReference Include="AutoMapper" Version="12.0.1" />
|
1035
|
-
<PackageReference Include="AutoMapper.Collection" Version="9.0.0" />
|
1036
|
-
</ItemGroup>
|
1037
|
-
</Project>
|
1038
|
-
""");
|
1039
|
-
|
1040
|
-
var dependencies = new[]
|
1041
|
-
{
|
1042
|
-
new Dependency("AutoMapper.Extensions.Microsoft.DependencyInjection", "12.0.1", DependencyType.PackageReference),
|
1043
|
-
new Dependency("AutoMapper", "12.0.1", DependencyType.PackageReference),
|
1044
|
-
new Dependency("AutoMapper.Collection", "9.0.0", DependencyType.PackageReference)
|
1045
|
-
};
|
1046
|
-
var update = new[]
|
1047
|
-
{
|
1048
|
-
new Dependency("AutoMapper.Collection", "10.0.0", DependencyType.PackageReference)
|
1049
|
-
};
|
1050
|
-
|
1051
|
-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
|
1052
|
-
Assert.NotNull(resolvedDependencies);
|
1053
|
-
Assert.Equal(3, resolvedDependencies.Length);
|
1054
|
-
Assert.Equal("AutoMapper.Extensions.Microsoft.DependencyInjection", resolvedDependencies[0].Name);
|
1055
|
-
Assert.Equal("12.0.1", resolvedDependencies[0].Version);
|
1056
|
-
Assert.Equal("AutoMapper", resolvedDependencies[1].Name);
|
1057
|
-
Assert.Equal("12.0.1", resolvedDependencies[1].Version);
|
1058
|
-
Assert.Equal("AutoMapper.Collection", resolvedDependencies[2].Name);
|
1059
|
-
Assert.Equal("9.0.0", resolvedDependencies[2].Version);
|
1060
|
-
}
|
1061
|
-
finally
|
1059
|
+
new Dependency("AutoMapper.Extensions.Microsoft.DependencyInjection", "12.0.1", DependencyType.PackageReference),
|
1060
|
+
new Dependency("AutoMapper", "12.0.1", DependencyType.PackageReference),
|
1061
|
+
new Dependency("AutoMapper.Collection", "9.0.0", DependencyType.PackageReference)
|
1062
|
+
};
|
1063
|
+
var update = new[]
|
1062
1064
|
{
|
1063
|
-
|
1064
|
-
}
|
1065
|
+
new Dependency("AutoMapper.Collection", "10.0.0", DependencyType.PackageReference)
|
1066
|
+
};
|
1067
|
+
|
1068
|
+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(
|
1069
|
+
tempDirectory.DirectoryPath,
|
1070
|
+
projectPath,
|
1071
|
+
"net8.0",
|
1072
|
+
dependencies,
|
1073
|
+
update,
|
1074
|
+
new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
|
1075
|
+
new TestLogger()
|
1076
|
+
);
|
1077
|
+
Assert.NotNull(resolvedDependencies);
|
1078
|
+
Assert.Equal(3, resolvedDependencies.Length);
|
1079
|
+
Assert.Equal("AutoMapper.Extensions.Microsoft.DependencyInjection", resolvedDependencies[0].Name);
|
1080
|
+
Assert.Equal("12.0.1", resolvedDependencies[0].Version);
|
1081
|
+
Assert.Equal("AutoMapper", resolvedDependencies[1].Name);
|
1082
|
+
Assert.Equal("12.0.1", resolvedDependencies[1].Version);
|
1083
|
+
Assert.Equal("AutoMapper.Collection", resolvedDependencies[2].Name);
|
1084
|
+
Assert.Equal("9.0.0", resolvedDependencies[2].Version);
|
1065
1085
|
}
|
1066
1086
|
|
1067
1087
|
// Two dependencies (Microsoft.Extensions.Caching.Memory), (Microsoft.EntityFrameworkCore.Analyzers) used by the same parent (Microsoft.EntityFrameworkCore), updating one of the dependencies
|
1068
|
-
[
|
1069
|
-
|
1088
|
+
[Theory]
|
1089
|
+
[InlineData(true)]
|
1090
|
+
[InlineData(false)]
|
1091
|
+
public async Task DependencyConflictsCanBeResolvedNewTwoDependenciesShareSameParent(bool useExistingSdks)
|
1070
1092
|
{
|
1071
|
-
var
|
1093
|
+
using var tempDirectory = new TemporaryDirectory();
|
1094
|
+
var projectPath = Path.Join(tempDirectory.DirectoryPath, "project.csproj");
|
1095
|
+
await File.WriteAllTextAsync(projectPath, """
|
1096
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
1097
|
+
<PropertyGroup>
|
1098
|
+
<TargetFramework>net8.0</TargetFramework>
|
1099
|
+
</PropertyGroup>
|
1100
|
+
<ItemGroup>
|
1101
|
+
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.11" />
|
1102
|
+
<PackageReference Include="Microsoft.EntityFrameworkCore.Analyzers" Version="7.0.11" />
|
1103
|
+
</ItemGroup>
|
1104
|
+
</Project>
|
1105
|
+
""");
|
1072
1106
|
|
1073
|
-
|
1107
|
+
var dependencies = new[]
|
1074
1108
|
{
|
1075
|
-
|
1076
|
-
|
1077
|
-
|
1078
|
-
|
1079
|
-
<TargetFramework>net8.0</TargetFramework>
|
1080
|
-
</PropertyGroup>
|
1081
|
-
<ItemGroup>
|
1082
|
-
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.11" />
|
1083
|
-
<PackageReference Include="Microsoft.EntityFrameworkCore.Analyzers" Version="7.0.11" />
|
1084
|
-
</ItemGroup>
|
1085
|
-
</Project>
|
1086
|
-
""");
|
1087
|
-
|
1088
|
-
var dependencies = new[]
|
1089
|
-
{
|
1090
|
-
new Dependency("Microsoft.EntityFrameworkCore", "7.0.11", DependencyType.PackageReference),
|
1091
|
-
new Dependency("Microsoft.EntityFrameworkCore.Analyzers", "7.0.11", DependencyType.PackageReference)
|
1092
|
-
};
|
1093
|
-
var update = new[]
|
1094
|
-
{
|
1095
|
-
new Dependency("Microsoft.Extensions.Caching.Memory", "8.0.0", DependencyType.PackageReference)
|
1096
|
-
};
|
1097
|
-
|
1098
|
-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
|
1099
|
-
Assert.NotNull(resolvedDependencies);
|
1100
|
-
Assert.Equal(2, resolvedDependencies.Length);
|
1101
|
-
Assert.Equal("Microsoft.EntityFrameworkCore", resolvedDependencies[0].Name);
|
1102
|
-
Assert.Equal("8.0.0", resolvedDependencies[0].Version);
|
1103
|
-
Assert.Equal("Microsoft.EntityFrameworkCore.Analyzers", resolvedDependencies[1].Name);
|
1104
|
-
Assert.Equal("8.0.0", resolvedDependencies[1].Version);
|
1105
|
-
}
|
1106
|
-
finally
|
1109
|
+
new Dependency("Microsoft.EntityFrameworkCore", "7.0.11", DependencyType.PackageReference),
|
1110
|
+
new Dependency("Microsoft.EntityFrameworkCore.Analyzers", "7.0.11", DependencyType.PackageReference)
|
1111
|
+
};
|
1112
|
+
var update = new[]
|
1107
1113
|
{
|
1108
|
-
|
1109
|
-
}
|
1114
|
+
new Dependency("Microsoft.Extensions.Caching.Memory", "8.0.0", DependencyType.PackageReference)
|
1115
|
+
};
|
1116
|
+
|
1117
|
+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(
|
1118
|
+
tempDirectory.DirectoryPath,
|
1119
|
+
projectPath,
|
1120
|
+
"net8.0",
|
1121
|
+
dependencies,
|
1122
|
+
update,
|
1123
|
+
new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
|
1124
|
+
new TestLogger()
|
1125
|
+
);
|
1126
|
+
Assert.NotNull(resolvedDependencies);
|
1127
|
+
Assert.Equal(2, resolvedDependencies.Length);
|
1128
|
+
Assert.Equal("Microsoft.EntityFrameworkCore", resolvedDependencies[0].Name);
|
1129
|
+
Assert.Equal("8.0.0", resolvedDependencies[0].Version);
|
1130
|
+
Assert.Equal("Microsoft.EntityFrameworkCore.Analyzers", resolvedDependencies[1].Name);
|
1131
|
+
Assert.Equal("8.0.0", resolvedDependencies[1].Version);
|
1110
1132
|
}
|
1111
1133
|
|
1112
1134
|
// Updating referenced package
|
1113
1135
|
// 4 dependency chain to be updated. Since the package to be updated is in the existing list, do not update its parents since we want to change as little as possible
|
1114
|
-
[
|
1115
|
-
|
1136
|
+
[Theory]
|
1137
|
+
[InlineData(true)]
|
1138
|
+
[InlineData(false)]
|
1139
|
+
public async Task DependencyConflictsCanBeResolvedNewFamilyOfFourExisting(bool useExistingSdks)
|
1116
1140
|
{
|
1117
|
-
var
|
1141
|
+
using var tempDirectory = new TemporaryDirectory();
|
1142
|
+
var projectPath = Path.Join(tempDirectory.DirectoryPath, "project.csproj");
|
1143
|
+
await File.WriteAllTextAsync(projectPath, """
|
1144
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
1145
|
+
<PropertyGroup>
|
1146
|
+
<TargetFramework>net8.0</TargetFramework>
|
1147
|
+
</PropertyGroup>
|
1148
|
+
<ItemGroup>
|
1149
|
+
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.0" />
|
1150
|
+
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="7.0.0" />
|
1151
|
+
<PackageReference Include= "Microsoft.EntityFrameworkCore" Version="7.0.0" />
|
1152
|
+
<PackageReference Include="Microsoft.EntityFrameworkCore.Analyzers" Version="7.0.0" />
|
1153
|
+
</ItemGroup>
|
1154
|
+
</Project>
|
1155
|
+
""");
|
1118
1156
|
|
1119
|
-
|
1157
|
+
var dependencies = new[]
|
1120
1158
|
{
|
1121
|
-
|
1122
|
-
|
1123
|
-
|
1124
|
-
|
1125
|
-
|
1126
|
-
|
1127
|
-
<ItemGroup>
|
1128
|
-
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.0" />
|
1129
|
-
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="7.0.0" />
|
1130
|
-
<PackageReference Include= "Microsoft.EntityFrameworkCore" Version="7.0.0" />
|
1131
|
-
<PackageReference Include="Microsoft.EntityFrameworkCore.Analyzers" Version="7.0.0" />
|
1132
|
-
</ItemGroup>
|
1133
|
-
</Project>
|
1134
|
-
""");
|
1135
|
-
|
1136
|
-
var dependencies = new[]
|
1137
|
-
{
|
1138
|
-
new Dependency("Microsoft.EntityFrameworkCore.Design", "7.0.0", DependencyType.PackageReference),
|
1139
|
-
new Dependency("Microsoft.EntityFrameworkCore.Relational", "7.0.0", DependencyType.PackageReference),
|
1140
|
-
new Dependency("Microsoft.EntityFrameworkCore", "7.0.0", DependencyType.PackageReference),
|
1141
|
-
new Dependency("Microsoft.EntityFrameworkCore.Analyzers", "7.0.0", DependencyType.PackageReference)
|
1142
|
-
};
|
1143
|
-
var update = new[]
|
1144
|
-
{
|
1145
|
-
new Dependency("Microsoft.EntityFrameworkCore.Analyzers", "8.0.0", DependencyType.PackageReference)
|
1146
|
-
};
|
1147
|
-
|
1148
|
-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
|
1149
|
-
Assert.NotNull(resolvedDependencies);
|
1150
|
-
Assert.Equal(4, resolvedDependencies.Length);
|
1151
|
-
Assert.Equal("Microsoft.EntityFrameworkCore.Design", resolvedDependencies[0].Name);
|
1152
|
-
Assert.Equal("7.0.0", resolvedDependencies[0].Version);
|
1153
|
-
Assert.Equal("Microsoft.EntityFrameworkCore.Relational", resolvedDependencies[1].Name);
|
1154
|
-
Assert.Equal("7.0.0", resolvedDependencies[1].Version);
|
1155
|
-
Assert.Equal("Microsoft.EntityFrameworkCore", resolvedDependencies[2].Name);
|
1156
|
-
Assert.Equal("7.0.0", resolvedDependencies[2].Version);
|
1157
|
-
Assert.Equal("Microsoft.EntityFrameworkCore.Analyzers", resolvedDependencies[3].Name);
|
1158
|
-
Assert.Equal("8.0.0", resolvedDependencies[3].Version);
|
1159
|
-
}
|
1160
|
-
finally
|
1159
|
+
new Dependency("Microsoft.EntityFrameworkCore.Design", "7.0.0", DependencyType.PackageReference),
|
1160
|
+
new Dependency("Microsoft.EntityFrameworkCore.Relational", "7.0.0", DependencyType.PackageReference),
|
1161
|
+
new Dependency("Microsoft.EntityFrameworkCore", "7.0.0", DependencyType.PackageReference),
|
1162
|
+
new Dependency("Microsoft.EntityFrameworkCore.Analyzers", "7.0.0", DependencyType.PackageReference)
|
1163
|
+
};
|
1164
|
+
var update = new[]
|
1161
1165
|
{
|
1162
|
-
|
1163
|
-
}
|
1166
|
+
new Dependency("Microsoft.EntityFrameworkCore.Analyzers", "8.0.0", DependencyType.PackageReference)
|
1167
|
+
};
|
1168
|
+
|
1169
|
+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(
|
1170
|
+
tempDirectory.DirectoryPath,
|
1171
|
+
projectPath,
|
1172
|
+
"net8.0",
|
1173
|
+
dependencies,
|
1174
|
+
update,
|
1175
|
+
new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
|
1176
|
+
new TestLogger()
|
1177
|
+
);
|
1178
|
+
Assert.NotNull(resolvedDependencies);
|
1179
|
+
Assert.Equal(4, resolvedDependencies.Length);
|
1180
|
+
Assert.Equal("Microsoft.EntityFrameworkCore.Design", resolvedDependencies[0].Name);
|
1181
|
+
Assert.Equal("7.0.0", resolvedDependencies[0].Version);
|
1182
|
+
Assert.Equal("Microsoft.EntityFrameworkCore.Relational", resolvedDependencies[1].Name);
|
1183
|
+
Assert.Equal("7.0.0", resolvedDependencies[1].Version);
|
1184
|
+
Assert.Equal("Microsoft.EntityFrameworkCore", resolvedDependencies[2].Name);
|
1185
|
+
Assert.Equal("7.0.0", resolvedDependencies[2].Version);
|
1186
|
+
Assert.Equal("Microsoft.EntityFrameworkCore.Analyzers", resolvedDependencies[3].Name);
|
1187
|
+
Assert.Equal("8.0.0", resolvedDependencies[3].Version);
|
1164
1188
|
}
|
1165
1189
|
|
1166
1190
|
// Updating unreferenced package
|
1167
1191
|
// 4 dependency chain to be updated, dependency to be updated is not in the existing list, so its family will all be updated
|
1168
|
-
[
|
1169
|
-
|
1192
|
+
[Theory]
|
1193
|
+
[InlineData(true)]
|
1194
|
+
[InlineData(false)]
|
1195
|
+
public async Task DependencyConflictsCanBeResolvedNewFamilyOfFourNotInExisting(bool useExistingSdks)
|
1170
1196
|
{
|
1171
|
-
var
|
1197
|
+
using var tempDirectory = new TemporaryDirectory();
|
1198
|
+
var projectPath = Path.Join(tempDirectory.DirectoryPath, "project.csproj");
|
1199
|
+
await File.WriteAllTextAsync(projectPath, """
|
1200
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
1201
|
+
<PropertyGroup>
|
1202
|
+
<TargetFramework>net8.0</TargetFramework>
|
1203
|
+
</PropertyGroup>
|
1204
|
+
<ItemGroup>
|
1205
|
+
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.0" />
|
1206
|
+
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="7.0.0" />
|
1207
|
+
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.0" />
|
1208
|
+
</ItemGroup>
|
1209
|
+
</Project>
|
1210
|
+
""");
|
1172
1211
|
|
1173
|
-
|
1212
|
+
var dependencies = new[]
|
1174
1213
|
{
|
1175
|
-
|
1176
|
-
|
1177
|
-
|
1178
|
-
|
1179
|
-
|
1180
|
-
</PropertyGroup>
|
1181
|
-
<ItemGroup>
|
1182
|
-
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="7.0.0" />
|
1183
|
-
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="7.0.0" />
|
1184
|
-
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="7.0.0" />
|
1185
|
-
</ItemGroup>
|
1186
|
-
</Project>
|
1187
|
-
""");
|
1188
|
-
|
1189
|
-
var dependencies = new[]
|
1190
|
-
{
|
1191
|
-
new Dependency("Microsoft.EntityFrameworkCore.Design", "7.0.0", DependencyType.PackageReference),
|
1192
|
-
new Dependency("Microsoft.EntityFrameworkCore.Relational", "7.0.0", DependencyType.PackageReference),
|
1193
|
-
new Dependency("Microsoft.EntityFrameworkCore", "7.0.0", DependencyType.PackageReference),
|
1194
|
-
};
|
1195
|
-
var update = new[]
|
1196
|
-
{
|
1197
|
-
new Dependency("Microsoft.EntityFrameworkCore.Analyzers", "8.0.0", DependencyType.PackageReference)
|
1198
|
-
};
|
1199
|
-
|
1200
|
-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
|
1201
|
-
Assert.NotNull(resolvedDependencies);
|
1202
|
-
Assert.Equal(3, resolvedDependencies.Length);
|
1203
|
-
Assert.Equal("Microsoft.EntityFrameworkCore.Design", resolvedDependencies[0].Name);
|
1204
|
-
Assert.Equal("8.0.0", resolvedDependencies[0].Version);
|
1205
|
-
Assert.Equal("Microsoft.EntityFrameworkCore.Relational", resolvedDependencies[1].Name);
|
1206
|
-
Assert.Equal("8.0.0", resolvedDependencies[1].Version);
|
1207
|
-
Assert.Equal("Microsoft.EntityFrameworkCore", resolvedDependencies[2].Name);
|
1208
|
-
Assert.Equal("8.0.0", resolvedDependencies[2].Version);
|
1209
|
-
}
|
1210
|
-
finally
|
1214
|
+
new Dependency("Microsoft.EntityFrameworkCore.Design", "7.0.0", DependencyType.PackageReference),
|
1215
|
+
new Dependency("Microsoft.EntityFrameworkCore.Relational", "7.0.0", DependencyType.PackageReference),
|
1216
|
+
new Dependency("Microsoft.EntityFrameworkCore", "7.0.0", DependencyType.PackageReference),
|
1217
|
+
};
|
1218
|
+
var update = new[]
|
1211
1219
|
{
|
1212
|
-
|
1213
|
-
}
|
1220
|
+
new Dependency("Microsoft.EntityFrameworkCore.Analyzers", "8.0.0", DependencyType.PackageReference)
|
1221
|
+
};
|
1222
|
+
|
1223
|
+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(
|
1224
|
+
tempDirectory.DirectoryPath,
|
1225
|
+
projectPath,
|
1226
|
+
"net8.0",
|
1227
|
+
dependencies,
|
1228
|
+
update,
|
1229
|
+
new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
|
1230
|
+
new TestLogger()
|
1231
|
+
);
|
1232
|
+
Assert.NotNull(resolvedDependencies);
|
1233
|
+
Assert.Equal(3, resolvedDependencies.Length);
|
1234
|
+
Assert.Equal("Microsoft.EntityFrameworkCore.Design", resolvedDependencies[0].Name);
|
1235
|
+
Assert.Equal("8.0.0", resolvedDependencies[0].Version);
|
1236
|
+
Assert.Equal("Microsoft.EntityFrameworkCore.Relational", resolvedDependencies[1].Name);
|
1237
|
+
Assert.Equal("8.0.0", resolvedDependencies[1].Version);
|
1238
|
+
Assert.Equal("Microsoft.EntityFrameworkCore", resolvedDependencies[2].Name);
|
1239
|
+
Assert.Equal("8.0.0", resolvedDependencies[2].Version);
|
1214
1240
|
}
|
1215
1241
|
|
1216
1242
|
// Updating a referenced transitive dependency
|
1217
1243
|
// Updating a transtitive dependency (System.Collections.Immutable) to 8.0.0, which will update its "parent" (Microsoft.CodeAnalysis.CSharp) and its "grandparent" (Microsoft.CodeAnalysis.CSharp.Workspaces) to update
|
1218
|
-
[
|
1219
|
-
|
1244
|
+
[Theory]
|
1245
|
+
[InlineData(true)]
|
1246
|
+
[InlineData(false)]
|
1247
|
+
public async Task DependencyConflictsCanBeResolvedNewFamilyOfFourSpecificExisting(bool useExistingSdks)
|
1220
1248
|
{
|
1221
|
-
var
|
1249
|
+
using var tempDirectory = new TemporaryDirectory();
|
1250
|
+
var projectPath = Path.Join(tempDirectory.DirectoryPath, "project.csproj");
|
1251
|
+
await File.WriteAllTextAsync(projectPath, """
|
1252
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
1253
|
+
<PropertyGroup>
|
1254
|
+
<TargetFramework>net8.0</TargetFramework>
|
1255
|
+
</PropertyGroup>
|
1256
|
+
<ItemGroup>
|
1257
|
+
<PackageReference Include="System.Collections.Immutable" Version="7.0.0" />
|
1258
|
+
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.8.0" />
|
1259
|
+
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.8.0" />
|
1260
|
+
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="4.8.0" />
|
1261
|
+
</ItemGroup>
|
1262
|
+
</Project>
|
1263
|
+
""");
|
1222
1264
|
|
1223
|
-
|
1265
|
+
var dependencies = new[]
|
1224
1266
|
{
|
1225
|
-
|
1226
|
-
|
1227
|
-
|
1228
|
-
|
1229
|
-
|
1230
|
-
|
1231
|
-
<ItemGroup>
|
1232
|
-
<PackageReference Include="System.Collections.Immutable" Version="7.0.0" />
|
1233
|
-
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.8.0" />
|
1234
|
-
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.8.0" />
|
1235
|
-
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="4.8.0" />
|
1236
|
-
</ItemGroup>
|
1237
|
-
</Project>
|
1238
|
-
""");
|
1239
|
-
|
1240
|
-
var dependencies = new[]
|
1241
|
-
{
|
1242
|
-
new Dependency("System.Collections.Immutable", "7.0.0", DependencyType.PackageReference),
|
1243
|
-
new Dependency("Microsoft.CodeAnalysis.CSharp.Workspaces", "4.8.0", DependencyType.PackageReference),
|
1244
|
-
new Dependency("Microsoft.CodeAnalysis.CSharp", "4.8.0", DependencyType.PackageReference),
|
1245
|
-
new Dependency("Microsoft.CodeAnalysis.Common", "4.8.0", DependencyType.PackageReference),
|
1246
|
-
};
|
1247
|
-
var update = new[]
|
1248
|
-
{
|
1249
|
-
new Dependency("System.Collections.Immutable", "8.0.0", DependencyType.PackageReference),
|
1250
|
-
};
|
1251
|
-
|
1252
|
-
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(repoRoot.FullName, projectPath, "net8.0", dependencies, update, new TestLogger());
|
1253
|
-
Assert.NotNull(resolvedDependencies);
|
1254
|
-
Assert.Equal(4, resolvedDependencies.Length);
|
1255
|
-
Assert.Equal("System.Collections.Immutable", resolvedDependencies[0].Name);
|
1256
|
-
Assert.Equal("8.0.0", resolvedDependencies[0].Version);
|
1257
|
-
Assert.Equal("Microsoft.CodeAnalysis.CSharp.Workspaces", resolvedDependencies[1].Name);
|
1258
|
-
Assert.Equal("4.8.0", resolvedDependencies[1].Version);
|
1259
|
-
Assert.Equal("Microsoft.CodeAnalysis.CSharp", resolvedDependencies[2].Name);
|
1260
|
-
Assert.Equal("4.8.0", resolvedDependencies[2].Version);
|
1261
|
-
Assert.Equal("Microsoft.CodeAnalysis.Common", resolvedDependencies[3].Name);
|
1262
|
-
Assert.Equal("4.8.0", resolvedDependencies[3].Version);
|
1263
|
-
}
|
1264
|
-
finally
|
1267
|
+
new Dependency("System.Collections.Immutable", "7.0.0", DependencyType.PackageReference),
|
1268
|
+
new Dependency("Microsoft.CodeAnalysis.CSharp.Workspaces", "4.8.0", DependencyType.PackageReference),
|
1269
|
+
new Dependency("Microsoft.CodeAnalysis.CSharp", "4.8.0", DependencyType.PackageReference),
|
1270
|
+
new Dependency("Microsoft.CodeAnalysis.Common", "4.8.0", DependencyType.PackageReference),
|
1271
|
+
};
|
1272
|
+
var update = new[]
|
1265
1273
|
{
|
1266
|
-
|
1267
|
-
}
|
1274
|
+
new Dependency("System.Collections.Immutable", "8.0.0", DependencyType.PackageReference),
|
1275
|
+
};
|
1276
|
+
|
1277
|
+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(
|
1278
|
+
tempDirectory.DirectoryPath,
|
1279
|
+
projectPath,
|
1280
|
+
"net8.0",
|
1281
|
+
dependencies,
|
1282
|
+
update,
|
1283
|
+
new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
|
1284
|
+
new TestLogger()
|
1285
|
+
);
|
1286
|
+
Assert.NotNull(resolvedDependencies);
|
1287
|
+
Assert.Equal(4, resolvedDependencies.Length);
|
1288
|
+
Assert.Equal("System.Collections.Immutable", resolvedDependencies[0].Name);
|
1289
|
+
Assert.Equal("8.0.0", resolvedDependencies[0].Version);
|
1290
|
+
Assert.Equal("Microsoft.CodeAnalysis.CSharp.Workspaces", resolvedDependencies[1].Name);
|
1291
|
+
Assert.Equal("4.8.0", resolvedDependencies[1].Version);
|
1292
|
+
Assert.Equal("Microsoft.CodeAnalysis.CSharp", resolvedDependencies[2].Name);
|
1293
|
+
Assert.Equal("4.8.0", resolvedDependencies[2].Version);
|
1294
|
+
Assert.Equal("Microsoft.CodeAnalysis.Common", resolvedDependencies[3].Name);
|
1295
|
+
Assert.Equal("4.8.0", resolvedDependencies[3].Version);
|
1268
1296
|
}
|
1269
1297
|
|
1270
1298
|
// Similar to the last test, with the "grandchild" (System.Collections.Immutable) not in the existing list
|
1271
|
-
[
|
1272
|
-
|
1299
|
+
[Theory]
|
1300
|
+
[InlineData(true)]
|
1301
|
+
[InlineData(false)]
|
1302
|
+
public async Task DependencyConflictsCanBeResolvedNewFamilyOfFourSpecificNotInExisting(bool useExistingSdks)
|
1273
1303
|
{
|
1274
|
-
var
|
1304
|
+
using var tempDirectory = new TemporaryDirectory();
|
1305
|
+
var projectPath = Path.Join(tempDirectory.DirectoryPath, "project.csproj");
|
1306
|
+
await File.WriteAllTextAsync(projectPath, """
|
1307
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
1308
|
+
<PropertyGroup>
|
1309
|
+
<TargetFramework>net8.0</TargetFramework>
|
1310
|
+
</PropertyGroup>
|
1311
|
+
<ItemGroup>
|
1312
|
+
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.8.0" />
|
1313
|
+
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.8.0" />
|
1314
|
+
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="4.8.0" />
|
1315
|
+
</ItemGroup>
|
1316
|
+
</Project>
|
1317
|
+
""");
|
1275
1318
|
|
1276
|
-
|
1319
|
+
var dependencies = new[]
|
1277
1320
|
{
|
1278
|
-
|
1279
|
-
|
1280
|
-
|
1281
|
-
<PropertyGroup>
|
1282
|
-
<TargetFramework>net8.0</TargetFramework>
|
1283
|
-
</PropertyGroup>
|
1284
|
-
<ItemGroup>
|
1285
|
-
<PackageReference Include="Microsoft.CodeAnalysis.CSharp.Workspaces" Version="4.8.0" />
|
1286
|
-
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.8.0" />
|
1287
|
-
<PackageReference Include="Microsoft.CodeAnalysis.Common" Version="4.8.0" />
|
1288
|
-
</ItemGroup>
|
1289
|
-
</Project>
|
1290
|
-
""");
|
1291
|
-
|
1292
|
-
var dependencies = new[]
|
1293
|
-
{
|
1294
|
-
new Dependency("Microsoft.CodeAnalysis.CSharp.Workspaces", "4.8.0", DependencyType.PackageReference),
|
1295
|
-
new Dependency("Microsoft.CodeAnalysis.CSharp", "4.8.0", DependencyType.PackageReference),
|
1296
|
-
new Dependency("Microsoft.CodeAnalysis.Common", "4.8.0", DependencyType.PackageReference),
|
1297
|
-
|
1298
|
-
};
|
1299
|
-
var update = new[]
|
1300
|
-
{
|
1301
|
-
new Dependency("System.Collections.Immutable", "8.0.0", DependencyType.PackageReference),
|
1302
|
-
};
|
1321
|
+
new Dependency("Microsoft.CodeAnalysis.CSharp.Workspaces", "4.8.0", DependencyType.PackageReference),
|
1322
|
+
new Dependency("Microsoft.CodeAnalysis.CSharp", "4.8.0", DependencyType.PackageReference),
|
1323
|
+
new Dependency("Microsoft.CodeAnalysis.Common", "4.8.0", DependencyType.PackageReference),
|
1303
1324
|
|
1304
|
-
|
1305
|
-
|
1306
|
-
Assert.Equal(3, resolvedDependencies.Length);
|
1307
|
-
Assert.Equal("Microsoft.CodeAnalysis.CSharp.Workspaces", resolvedDependencies[0].Name);
|
1308
|
-
Assert.Equal("4.9.2", resolvedDependencies[0].Version);
|
1309
|
-
Assert.Equal("Microsoft.CodeAnalysis.CSharp", resolvedDependencies[1].Name);
|
1310
|
-
Assert.Equal("4.9.2", resolvedDependencies[1].Version);
|
1311
|
-
Assert.Equal("Microsoft.CodeAnalysis.Common", resolvedDependencies[2].Name);
|
1312
|
-
Assert.Equal("4.9.2", resolvedDependencies[2].Version);
|
1313
|
-
}
|
1314
|
-
finally
|
1325
|
+
};
|
1326
|
+
var update = new[]
|
1315
1327
|
{
|
1316
|
-
|
1317
|
-
}
|
1328
|
+
new Dependency("System.Collections.Immutable", "8.0.0", DependencyType.PackageReference),
|
1329
|
+
};
|
1330
|
+
|
1331
|
+
var resolvedDependencies = await MSBuildHelper.ResolveDependencyConflicts(
|
1332
|
+
tempDirectory.DirectoryPath,
|
1333
|
+
projectPath,
|
1334
|
+
"net8.0",
|
1335
|
+
dependencies,
|
1336
|
+
update,
|
1337
|
+
new ExperimentsManager() { InstallDotnetSdks = useExistingSdks },
|
1338
|
+
new TestLogger()
|
1339
|
+
);
|
1340
|
+
Assert.NotNull(resolvedDependencies);
|
1341
|
+
Assert.Equal(3, resolvedDependencies.Length);
|
1342
|
+
Assert.Equal("Microsoft.CodeAnalysis.CSharp.Workspaces", resolvedDependencies[0].Name);
|
1343
|
+
Assert.Equal("4.9.2", resolvedDependencies[0].Version);
|
1344
|
+
Assert.Equal("Microsoft.CodeAnalysis.CSharp", resolvedDependencies[1].Name);
|
1345
|
+
Assert.Equal("4.9.2", resolvedDependencies[1].Version);
|
1346
|
+
Assert.Equal("Microsoft.CodeAnalysis.Common", resolvedDependencies[2].Name);
|
1347
|
+
Assert.Equal("4.9.2", resolvedDependencies[2].Version);
|
1318
1348
|
}
|
1319
1349
|
#endregion
|
1320
1350
|
|