From 9e0442aa484161e7a10a62ffdc36cde8373b18d0 Mon Sep 17 00:00:00 2001 From: MichalPavlik Date: Mon, 22 Jul 2024 14:57:35 +0200 Subject: [PATCH 1/7] Adding a private indicator for the activation of the terminal logger --- src/MSBuild/XMake.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/MSBuild/XMake.cs b/src/MSBuild/XMake.cs index 7ebb7971909..3c2c494eec0 100644 --- a/src/MSBuild/XMake.cs +++ b/src/MSBuild/XMake.cs @@ -2516,6 +2516,11 @@ private static bool ProcessCommandLineSwitches( #endif bool useTerminalLogger = ProcessTerminalLoggerConfiguration(commandLineSwitches, out string aggregatedTerminalLoggerParameters); + + // This is temporary until we can remove the need for the environment variable. + // DO NOT use this environment variable for any new features as it will be removed without further notice. + Environment.SetEnvironmentVariable("_MSBUILDTLENABLED", useTerminalLogger ? "1" : "0"); + DisplayVersionMessageIfNeeded(recursing, useTerminalLogger, commandLineSwitches); // Idle priority would prevent the build from proceeding as the user does normal actions. From 658024b86b79b156963dcf13b44db8c30b8fe813 Mon Sep 17 00:00:00 2001 From: MichalPavlik Date: Tue, 23 Jul 2024 11:16:36 +0200 Subject: [PATCH 2/7] Fixed ProcessInvalidTargetSwitch test --- src/MSBuild.UnitTests/CommandLineSwitches_Tests.cs | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/MSBuild.UnitTests/CommandLineSwitches_Tests.cs b/src/MSBuild.UnitTests/CommandLineSwitches_Tests.cs index 6ffae8dfb52..46a81b67958 100644 --- a/src/MSBuild.UnitTests/CommandLineSwitches_Tests.cs +++ b/src/MSBuild.UnitTests/CommandLineSwitches_Tests.cs @@ -1522,6 +1522,8 @@ public void ProcessInvalidTargetSwitch() """; using TestEnvironment testEnvironment = TestEnvironment.Create(); + testEnvironment.SetEnvironmentVariable("_MSBUILDTLENABLED", "0"); + string project = testEnvironment.CreateTestProjectWithFiles("project.proj", projectContent).ProjectFile; #if FEATURE_GET_COMMANDLINE From b4878620c2dda2b64a7e691d0407f3fbd76274ec Mon Sep 17 00:00:00 2001 From: MichalPavlik Date: Tue, 23 Jul 2024 15:12:42 +0200 Subject: [PATCH 3/7] Fixed more tests --- src/Build.UnitTests/Utilities_Tests.cs | 1 + src/MSBuild.UnitTests/XMake_Tests.cs | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/Build.UnitTests/Utilities_Tests.cs b/src/Build.UnitTests/Utilities_Tests.cs index 60ed5d2bd01..2e6702716fd 100644 --- a/src/Build.UnitTests/Utilities_Tests.cs +++ b/src/Build.UnitTests/Utilities_Tests.cs @@ -82,6 +82,7 @@ public void CommentsInPreprocessing() TransientTestFile outputFile = env.CreateFile("tempOutput.tmp"); env.SetEnvironmentVariable("MSBUILDLOADALLFILESASWRITEABLE", "1"); + env.SetEnvironmentVariable("_MSBUILDTLENABLED", "0"); #if FEATURE_GET_COMMANDLINE MSBuildApp.Execute(@"c:\bin\msbuild.exe """ + inputFile.Path + diff --git a/src/MSBuild.UnitTests/XMake_Tests.cs b/src/MSBuild.UnitTests/XMake_Tests.cs index c33b4e8da98..116d085d4b1 100644 --- a/src/MSBuild.UnitTests/XMake_Tests.cs +++ b/src/MSBuild.UnitTests/XMake_Tests.cs @@ -613,6 +613,8 @@ public void VersionSwitchDisableChangeWave() public void ErrorCommandLine() { string oldValueForMSBuildLoadMicrosoftTargetsReadOnly = Environment.GetEnvironmentVariable("MSBuildLoadMicrosoftTargetsReadOnly"); + string oldValueForMSBuildTLEnabled = Environment.GetEnvironmentVariable("_MSBUILDTLENABLED"); + #if FEATURE_GET_COMMANDLINE MSBuildApp.Execute(@"c:\bin\msbuild.exe -junk").ShouldBe(MSBuildApp.ExitType.SwitchError); @@ -627,6 +629,7 @@ public void ErrorCommandLine() MSBuildApp.Execute(new[] { @"msbuild.exe", "@bogus.rsp" }).ShouldBe(MSBuildApp.ExitType.InitializationError); #endif Environment.SetEnvironmentVariable("MSBuildLoadMicrosoftTargetsReadOnly", oldValueForMSBuildLoadMicrosoftTargetsReadOnly); + Environment.SetEnvironmentVariable("_MSBUILDTLENABLED", oldValueForMSBuildTLEnabled); } [Fact] From 048e8b5a2aba4705b32ee1425ffac7f7f08f29f5 Mon Sep 17 00:00:00 2001 From: MichalPavlik Date: Wed, 24 Jul 2024 13:37:07 +0200 Subject: [PATCH 4/7] Fixed MSBuildEngineLogger test --- src/MSBuild.UnitTests/XMake_Tests.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/MSBuild.UnitTests/XMake_Tests.cs b/src/MSBuild.UnitTests/XMake_Tests.cs index 116d085d4b1..a2ccabd00a1 100644 --- a/src/MSBuild.UnitTests/XMake_Tests.cs +++ b/src/MSBuild.UnitTests/XMake_Tests.cs @@ -1137,6 +1137,7 @@ public void MSBuildEngineLogger() { using TestEnvironment testEnvironment = TestEnvironment.Create(); testEnvironment.SetEnvironmentVariable("DOTNET_CLI_UI_LANGUAGE", "en"); // build machines may have other values. + testEnvironment.SetEnvironmentVariable("_MSBUILDTLENABLED", "0"); CultureInfo.CurrentUICulture = new CultureInfo("en"); // Validate that the thread will produce an english log regardless of the machine OS language string oldValueForMSBuildLoadMicrosoftTargetsReadOnly = Environment.GetEnvironmentVariable("MSBuildLoadMicrosoftTargetsReadOnly"); From 20c7369056259b9602b75fb296be5043e4cc6f4c Mon Sep 17 00:00:00 2001 From: MichalPavlik Date: Wed, 24 Jul 2024 14:47:49 +0200 Subject: [PATCH 5/7] Additional tests fix --- src/Build.UnitTests/Utilities_Tests.cs | 1 - src/MSBuild.UnitTests/CommandLineSwitches_Tests.cs | 1 - src/MSBuild.UnitTests/XMake_Tests.cs | 4 +--- src/UnitTests.Shared/TestEnvironment.cs | 1 + 4 files changed, 2 insertions(+), 5 deletions(-) diff --git a/src/Build.UnitTests/Utilities_Tests.cs b/src/Build.UnitTests/Utilities_Tests.cs index 2e6702716fd..60ed5d2bd01 100644 --- a/src/Build.UnitTests/Utilities_Tests.cs +++ b/src/Build.UnitTests/Utilities_Tests.cs @@ -82,7 +82,6 @@ public void CommentsInPreprocessing() TransientTestFile outputFile = env.CreateFile("tempOutput.tmp"); env.SetEnvironmentVariable("MSBUILDLOADALLFILESASWRITEABLE", "1"); - env.SetEnvironmentVariable("_MSBUILDTLENABLED", "0"); #if FEATURE_GET_COMMANDLINE MSBuildApp.Execute(@"c:\bin\msbuild.exe """ + inputFile.Path + diff --git a/src/MSBuild.UnitTests/CommandLineSwitches_Tests.cs b/src/MSBuild.UnitTests/CommandLineSwitches_Tests.cs index 46a81b67958..037e6c4f01b 100644 --- a/src/MSBuild.UnitTests/CommandLineSwitches_Tests.cs +++ b/src/MSBuild.UnitTests/CommandLineSwitches_Tests.cs @@ -1522,7 +1522,6 @@ public void ProcessInvalidTargetSwitch() """; using TestEnvironment testEnvironment = TestEnvironment.Create(); - testEnvironment.SetEnvironmentVariable("_MSBUILDTLENABLED", "0"); string project = testEnvironment.CreateTestProjectWithFiles("project.proj", projectContent).ProjectFile; diff --git a/src/MSBuild.UnitTests/XMake_Tests.cs b/src/MSBuild.UnitTests/XMake_Tests.cs index a2ccabd00a1..45298bd9768 100644 --- a/src/MSBuild.UnitTests/XMake_Tests.cs +++ b/src/MSBuild.UnitTests/XMake_Tests.cs @@ -613,7 +613,6 @@ public void VersionSwitchDisableChangeWave() public void ErrorCommandLine() { string oldValueForMSBuildLoadMicrosoftTargetsReadOnly = Environment.GetEnvironmentVariable("MSBuildLoadMicrosoftTargetsReadOnly"); - string oldValueForMSBuildTLEnabled = Environment.GetEnvironmentVariable("_MSBUILDTLENABLED"); #if FEATURE_GET_COMMANDLINE MSBuildApp.Execute(@"c:\bin\msbuild.exe -junk").ShouldBe(MSBuildApp.ExitType.SwitchError); @@ -629,7 +628,6 @@ public void ErrorCommandLine() MSBuildApp.Execute(new[] { @"msbuild.exe", "@bogus.rsp" }).ShouldBe(MSBuildApp.ExitType.InitializationError); #endif Environment.SetEnvironmentVariable("MSBuildLoadMicrosoftTargetsReadOnly", oldValueForMSBuildLoadMicrosoftTargetsReadOnly); - Environment.SetEnvironmentVariable("_MSBUILDTLENABLED", oldValueForMSBuildTLEnabled); } [Fact] @@ -1137,7 +1135,7 @@ public void MSBuildEngineLogger() { using TestEnvironment testEnvironment = TestEnvironment.Create(); testEnvironment.SetEnvironmentVariable("DOTNET_CLI_UI_LANGUAGE", "en"); // build machines may have other values. - testEnvironment.SetEnvironmentVariable("_MSBUILDTLENABLED", "0"); + CultureInfo.CurrentUICulture = new CultureInfo("en"); // Validate that the thread will produce an english log regardless of the machine OS language string oldValueForMSBuildLoadMicrosoftTargetsReadOnly = Environment.GetEnvironmentVariable("MSBuildLoadMicrosoftTargetsReadOnly"); diff --git a/src/UnitTests.Shared/TestEnvironment.cs b/src/UnitTests.Shared/TestEnvironment.cs index d961178b298..0cc1527cfa3 100644 --- a/src/UnitTests.Shared/TestEnvironment.cs +++ b/src/UnitTests.Shared/TestEnvironment.cs @@ -429,6 +429,7 @@ public class EnvironmentInvariant : TestInvariant public EnvironmentInvariant() { _initialEnvironment = Environment.GetEnvironmentVariables(); + _initialEnvironment.Add("_MSBUILDTLENABLED", "0"); } public override void AssertInvariant(ITestOutputHelper output) From 4bd150f7db8ab92a9b5f93322afbb79ac34e9d03 Mon Sep 17 00:00:00 2001 From: MichalPavlik Date: Wed, 24 Jul 2024 14:49:54 +0200 Subject: [PATCH 6/7] Removed unnecessary empty lines --- src/MSBuild.UnitTests/CommandLineSwitches_Tests.cs | 1 - src/MSBuild.UnitTests/XMake_Tests.cs | 2 -- 2 files changed, 3 deletions(-) diff --git a/src/MSBuild.UnitTests/CommandLineSwitches_Tests.cs b/src/MSBuild.UnitTests/CommandLineSwitches_Tests.cs index 037e6c4f01b..6ffae8dfb52 100644 --- a/src/MSBuild.UnitTests/CommandLineSwitches_Tests.cs +++ b/src/MSBuild.UnitTests/CommandLineSwitches_Tests.cs @@ -1522,7 +1522,6 @@ public void ProcessInvalidTargetSwitch() """; using TestEnvironment testEnvironment = TestEnvironment.Create(); - string project = testEnvironment.CreateTestProjectWithFiles("project.proj", projectContent).ProjectFile; #if FEATURE_GET_COMMANDLINE diff --git a/src/MSBuild.UnitTests/XMake_Tests.cs b/src/MSBuild.UnitTests/XMake_Tests.cs index 45298bd9768..c33b4e8da98 100644 --- a/src/MSBuild.UnitTests/XMake_Tests.cs +++ b/src/MSBuild.UnitTests/XMake_Tests.cs @@ -613,7 +613,6 @@ public void VersionSwitchDisableChangeWave() public void ErrorCommandLine() { string oldValueForMSBuildLoadMicrosoftTargetsReadOnly = Environment.GetEnvironmentVariable("MSBuildLoadMicrosoftTargetsReadOnly"); - #if FEATURE_GET_COMMANDLINE MSBuildApp.Execute(@"c:\bin\msbuild.exe -junk").ShouldBe(MSBuildApp.ExitType.SwitchError); @@ -1135,7 +1134,6 @@ public void MSBuildEngineLogger() { using TestEnvironment testEnvironment = TestEnvironment.Create(); testEnvironment.SetEnvironmentVariable("DOTNET_CLI_UI_LANGUAGE", "en"); // build machines may have other values. - CultureInfo.CurrentUICulture = new CultureInfo("en"); // Validate that the thread will produce an english log regardless of the machine OS language string oldValueForMSBuildLoadMicrosoftTargetsReadOnly = Environment.GetEnvironmentVariable("MSBuildLoadMicrosoftTargetsReadOnly"); From 3a2e19be0bac666d105604e956fe96367a7f2b91 Mon Sep 17 00:00:00 2001 From: MichalPavlik Date: Thu, 25 Jul 2024 15:21:10 +0200 Subject: [PATCH 7/7] "Final" test fix --- src/UnitTests.Shared/TestEnvironment.cs | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/UnitTests.Shared/TestEnvironment.cs b/src/UnitTests.Shared/TestEnvironment.cs index 0cc1527cfa3..045fce7ffb9 100644 --- a/src/UnitTests.Shared/TestEnvironment.cs +++ b/src/UnitTests.Shared/TestEnvironment.cs @@ -429,7 +429,6 @@ public class EnvironmentInvariant : TestInvariant public EnvironmentInvariant() { _initialEnvironment = Environment.GetEnvironmentVariables(); - _initialEnvironment.Add("_MSBUILDTLENABLED", "0"); } public override void AssertInvariant(ITestOutputHelper output) @@ -443,6 +442,11 @@ void AssertDictionaryInclusion(IDictionary superset, IDictionary subset, string { foreach (var key in subset.Keys) { + if (key is "_MSBUILDTLENABLED") + { + continue; + } + // workaround for https://github.com/dotnet/msbuild/pull/3866 // if the initial environment had empty keys, then MSBuild will accidentally remove them via Environment.SetEnvironmentVariable if (operation != "removed" || !string.IsNullOrEmpty((string)subset[key]))