diff --git a/src/Microsoft.Build.Utilities.ProjectCreation.UnitTests/SolutionTests.cs b/src/Microsoft.Build.Utilities.ProjectCreation.UnitTests/SolutionTests.cs index be8aac8..548e455 100644 --- a/src/Microsoft.Build.Utilities.ProjectCreation.UnitTests/SolutionTests.cs +++ b/src/Microsoft.Build.Utilities.ProjectCreation.UnitTests/SolutionTests.cs @@ -4,6 +4,7 @@ using Microsoft.VisualStudio.SolutionPersistence.Model; using Shouldly; +using System.Collections.Generic; using System.IO; using Xunit; @@ -51,5 +52,47 @@ public void CanBuild() .Project(project1) .TryBuild(out _); } + + [Fact] + public void CanBuildWithGlobalProperties() + { + ProjectCreator project1 = ProjectCreator.Templates.SdkCsproj(path: Path.Combine(TestRootPath, "project1", "project1.csproj")); + + Directory.CreateDirectory(Path.Combine(TestRootPath, "project1")); + + File.WriteAllText( + Path.Combine(TestRootPath, "project1", "Xyz.cs"), + """ + public class Xyz + { + public void Boo(int value) + { + // This switch statement has no fallthrough, which triggers warning CS1522 normally. + switch (value) + { + } + } + } + """); + + SolutionCreator solution = SolutionCreator.Create(Path.Combine(TestRootPath, "solution1.sln")) + .Configuration("Debug") + .Configuration("Release") + .Platform("Any CPU") + .Project(project1); + + // When built normally, we should see a warning. + solution.TryBuild(restore: true, out _, out BuildOutput output); + output.Warnings.Count.ShouldBe(1); + + // When built with a global property turning that warning off, we shouldn't see any. + IDictionary globalProperties = new Dictionary() + { + { "NoWarn", "CS1522" }, + }; + + solution.TryBuild(restore: true, globalProperties, out _, out output); + output.Warnings.ShouldBeEmpty(); + } } } diff --git a/src/Microsoft.Build.Utilities.ProjectCreation/SolutionCreator.Build.cs b/src/Microsoft.Build.Utilities.ProjectCreation/SolutionCreator.Build.cs index 7b9359e..fc441e8 100644 --- a/src/Microsoft.Build.Utilities.ProjectCreation/SolutionCreator.Build.cs +++ b/src/Microsoft.Build.Utilities.ProjectCreation/SolutionCreator.Build.cs @@ -493,7 +493,7 @@ private bool Build(bool restore, string[]? targets, IDictionary? Save(); } - bool result = BuildHost.TryBuild(FullPath, ProjectCollection, buildOutput, out targetOutputs, targets: targets); + bool result = BuildHost.TryBuild(FullPath, ProjectCollection, buildOutput, out targetOutputs, targets: targets, globalProperties: globalProperties); return result; }