diff --git a/src/StructuredLogViewer/Entrypoint.cs b/src/StructuredLogViewer/Entrypoint.cs index cc18ac84e..81846ddd6 100644 --- a/src/StructuredLogViewer/Entrypoint.cs +++ b/src/StructuredLogViewer/Entrypoint.cs @@ -1,4 +1,5 @@ using System; +using System.Diagnostics; using System.Windows; using System.Windows.Threading; using Microsoft.Build.Logging.StructuredLogger; diff --git a/src/StructuredLogger/BinaryLogger/BuildEventArgsWriter.cs b/src/StructuredLogger/BinaryLogger/BuildEventArgsWriter.cs index d33b03ac8..8c754c03b 100644 --- a/src/StructuredLogger/BinaryLogger/BuildEventArgsWriter.cs +++ b/src/StructuredLogger/BinaryLogger/BuildEventArgsWriter.cs @@ -250,7 +250,14 @@ private void Write(BuildStartedEventArgs e) { Write(BinaryLogRecordKind.BuildStarted); WriteBuildEventArgsFields(e); - Write(e.BuildEnvironment); + if (!string.IsNullOrEmpty(Environment.GetEnvironmentVariable("MSBUILDLOGALLENVIRONMENTVARIABLES"))) + { + Write(e.BuildEnvironment); + } + else + { + Write(0); + } } private void Write(BuildFinishedEventArgs e) diff --git a/src/StructuredLogger/Construction/Construction.cs b/src/StructuredLogger/Construction/Construction.cs index 5d5f866a7..01ba93289 100644 --- a/src/StructuredLogger/Construction/Construction.cs +++ b/src/StructuredLogger/Construction/Construction.cs @@ -80,8 +80,18 @@ public void BuildStarted(object sender, BuildStartedEventArgs args) lock (syncLock) { Build.StartTime = args.Timestamp; - var properties = Build.GetOrCreateNodeWithName(Intern(Strings.Environment)); - AddProperties(properties, args.BuildEnvironment); + if (args.BuildEnvironment?.Count > 0) + { + var properties = Build.GetOrCreateNodeWithName(Intern(Strings.Environment)); + AddProperties(properties, args.BuildEnvironment); + } + else + { + Build.AddChild(new Note + { + Text = Intern(Strings.NoEnvironment) + }); + } // realize the evaluation folder now so it is ordered before the main solution node _ = EvaluationFolder; diff --git a/src/StructuredLogger/Construction/MessageProcessor.cs b/src/StructuredLogger/Construction/MessageProcessor.cs index 8a2279fe2..e0a9f43fa 100644 --- a/src/StructuredLogger/Construction/MessageProcessor.cs +++ b/src/StructuredLogger/Construction/MessageProcessor.cs @@ -561,7 +561,11 @@ public void AddMessage(LazyFormattedBuildEventArgs args, string message) } } - if (nodeToAdd == null) + if (args is EnvironmentVariableReadEventArgs envArgs) + { + nodeToAdd = new Property { Name = Intern(envArgs.EnvironmentVariableName), Value = Intern(message) }; + } + else if (nodeToAdd == null) { message = Intern(message); nodeToAdd = new Message diff --git a/src/StructuredLogger/Strings/Strings.cs b/src/StructuredLogger/Strings/Strings.cs index 8bbec741d..a5362bed0 100644 --- a/src/StructuredLogger/Strings/Strings.cs +++ b/src/StructuredLogger/Strings/Strings.cs @@ -446,6 +446,7 @@ public static Match IsFoundConflicts(string text) public static string Evaluation => "Evaluation"; public static string Environment => "Environment"; + public static string NoEnvironment => "Define a value for MSBUILDLOGALLENVIRONMENTVARIABLES to log all environment variables. Only those used in evaluating properties are currently logged."; public static string Imports => "Imports"; public static string DetailedSummary => "Detailed summary"; public static string Parameters => "Parameters";