From 5ef2a1956288e14b5334abd15f5f4254a66dd1c1 Mon Sep 17 00:00:00 2001 From: Jeff Kluge Date: Tue, 7 Jul 2026 10:54:57 -0700 Subject: [PATCH] Fix for not calling restore during build for certain overload --- .../BuildTests.cs | 46 +++++++++++++++++++ .../ProjectCreator.Build.cs | 4 +- 2 files changed, 48 insertions(+), 2 deletions(-) diff --git a/src/Microsoft.Build.Utilities.ProjectCreation.UnitTests/BuildTests.cs b/src/Microsoft.Build.Utilities.ProjectCreation.UnitTests/BuildTests.cs index 2fa7f33..9c61af4 100644 --- a/src/Microsoft.Build.Utilities.ProjectCreation.UnitTests/BuildTests.cs +++ b/src/Microsoft.Build.Utilities.ProjectCreation.UnitTests/BuildTests.cs @@ -276,6 +276,52 @@ public void CanRestoreAndBuildMultipleTimes() result.ShouldBeTrue(buildOutput.GetConsoleLog()); } + [Fact] + public void TryBuildWithRestoreAndTargetWithoutBuildOutputRestoresBeforeBuild() + { + string markerPath = Path.Combine(TestRootPath, $"{Guid.NewGuid():N}.restore-marker"); + + ProjectCreator.Create(path: GetTempFileName(".proj")) + .Target("Restore") + .Task( + "WriteLinesToFile", + parameters: new Dictionary + { + ["File"] = markerPath, + ["Lines"] = "restored", + ["Overwrite"] = bool.TrueString, + }) + .Target("Build") + .TaskError("Restore target did not run.", condition: $"!Exists('{markerPath}')") + .Save() + .TryBuild(restore: true, target: "Build", globalProperties: null, out bool result); + + result.ShouldBeTrue(); + } + + [Fact] + public void TryBuildWithRestoreWithoutBuildOutputRestoresBeforeBuild() + { + string markerPath = Path.Combine(TestRootPath, $"{Guid.NewGuid():N}.restore-marker"); + + ProjectCreator.Create(path: GetTempFileName(".proj"), defaultTargets: "Build") + .Target("Restore") + .Task( + "WriteLinesToFile", + parameters: new Dictionary + { + ["File"] = markerPath, + ["Lines"] = "restored", + ["Overwrite"] = bool.TrueString, + }) + .Target("Build") + .TaskError("Restore target did not run.", condition: $"!Exists('{markerPath}')") + .Save() + .TryBuild(restore: true, globalProperties: null, out bool result); + + result.ShouldBeTrue(); + } + [Fact] public void ProjectCollectionLoggersWork() { diff --git a/src/Microsoft.Build.Utilities.ProjectCreation/ProjectCreator.Build.cs b/src/Microsoft.Build.Utilities.ProjectCreation/ProjectCreator.Build.cs index 4b93de1..f5229fe 100644 --- a/src/Microsoft.Build.Utilities.ProjectCreation/ProjectCreator.Build.cs +++ b/src/Microsoft.Build.Utilities.ProjectCreation/ProjectCreator.Build.cs @@ -59,7 +59,7 @@ public ProjectCreator TryBuild(bool restore, string target, IDictionary? global { BuildOutput buildOutput = BuildOutput.Create(); - result = Build(restore: false, targets: null, globalProperties, buildOutput, out _); + result = Build(restore, targets: null, globalProperties, buildOutput, out _); return this; }