diff --git a/src/StructuredLogger.Tests/BinaryLoggerTests.cs b/src/StructuredLogger.Tests/BinaryLoggerTests.cs index 3a25c149c..d0ff697db 100644 --- a/src/StructuredLogger.Tests/BinaryLoggerTests.cs +++ b/src/StructuredLogger.Tests/BinaryLoggerTests.cs @@ -106,6 +106,8 @@ public void TestBinaryLoggerRoundtrip(bool useInMemoryProject) var xml1 = GetTestFile("1.xml"); var xml2 = GetTestFile("2.xml"); + build.Children.Where(c => c.TypeName == "Error").Should().BeEmpty("There should be no errors in the build"); + Serialization.Write(build, xml1); Serialization.Write(build, GetTestFile("1.buildlog")); diff --git a/src/StructuredLogger/BinaryLogger/BinaryLogger.cs b/src/StructuredLogger/BinaryLogger/BinaryLogger.cs index 65035a094..eb7c959d4 100644 --- a/src/StructuredLogger/BinaryLogger/BinaryLogger.cs +++ b/src/StructuredLogger/BinaryLogger/BinaryLogger.cs @@ -65,6 +65,10 @@ public sealed class BinaryLogger : ILogger // - Making ProjectStartedEventArgs, ProjectEvaluationFinishedEventArgs, AssemblyLoadBuildEventArgs equal // between de/serialization roundtrips. // - Adding serialized events lengths - to support forward compatible reading + // version 19: + // - GeneratedFileUsedEventArgs exposed for brief period of time (so let's continue with 20) + // version 20: + // - TaskStartedEventArgs: Added TaskAssemblyLocation property // This should be never changed. // The minimum version of the binary log reader that can read log of above version. @@ -72,7 +76,7 @@ public sealed class BinaryLogger : ILogger // The current version of the binary log representation. // Changes with each update of the binary log format. - internal const int FileFormatVersion = 18; + internal const int FileFormatVersion = 20; // The minimum version of the binary log reader that can read log of above version. // This should be changed only when the binary log format is changed in a way that would prevent it from being // read by older readers. (changing of the individual BuildEventArgs or adding new is fine - as reader can diff --git a/src/StructuredLogger/BinaryLogger/BuildEventArgsReader.cs b/src/StructuredLogger/BinaryLogger/BuildEventArgsReader.cs index f70bf8253..1ce077810 100644 --- a/src/StructuredLogger/BinaryLogger/BuildEventArgsReader.cs +++ b/src/StructuredLogger/BinaryLogger/BuildEventArgsReader.cs @@ -910,6 +910,7 @@ private BuildEventArgs ReadTaskStartedEventArgs() var taskName = ReadOptionalString(); var projectFile = ReadOptionalString(); var taskFile = ReadOptionalString(); + var taskAssemblyLocation = _fileFormatVersion >= 20 ? ReadOptionalString() : null; string message = fields.Message; if (_fileFormatVersion >= 13) @@ -926,6 +927,7 @@ private BuildEventArgs ReadTaskStartedEventArgs() fields.Timestamp); e.LineNumber = fields.LineNumber; e.ColumnNumber = fields.ColumnNumber; + e.TaskAssemblyLocation = taskAssemblyLocation; SetCommonFields(e, fields); return e; } diff --git a/src/StructuredLogger/BinaryLogger/BuildEventArgsWriter.cs b/src/StructuredLogger/BinaryLogger/BuildEventArgsWriter.cs index 463730149..79172aec9 100644 --- a/src/StructuredLogger/BinaryLogger/BuildEventArgsWriter.cs +++ b/src/StructuredLogger/BinaryLogger/BuildEventArgsWriter.cs @@ -412,6 +412,9 @@ private BinaryLogRecordKind Write(TaskStartedEventArgs e) WriteDeduplicatedString(e.TaskName); WriteDeduplicatedString(e.ProjectFile); WriteDeduplicatedString(e.TaskFile); + WriteDeduplicatedString(e is TaskStartedEventArgs2 taskStarted2 ? + taskStarted2.TaskAssemblyLocation : + null); return BinaryLogRecordKind.TaskStarted; } @@ -792,7 +795,7 @@ private static BuildEventArgsFieldFlags GetBuildEventArgsFieldFlags(BuildEventAr // We're only going to write the arguments for messages, // warnings and errors. Only set the flag for these. - if (e is LazyFormattedBuildEventArgs lazy && Reflector.GetArguments(lazy) is { Length: > 0} && + if (e is LazyFormattedBuildEventArgs lazy && Reflector.GetArguments(lazy) is { Length: > 0 } && (e is BuildMessageEventArgs or BuildWarningEventArgs or BuildErrorEventArgs)) { flags |= BuildEventArgsFieldFlags.Arguments; diff --git a/src/StructuredLogger/BinaryLogger/TaskStartedEventArgs2.cs b/src/StructuredLogger/BinaryLogger/TaskStartedEventArgs2.cs index a72d5d923..f5ca2df52 100644 --- a/src/StructuredLogger/BinaryLogger/TaskStartedEventArgs2.cs +++ b/src/StructuredLogger/BinaryLogger/TaskStartedEventArgs2.cs @@ -24,5 +24,6 @@ public TaskStartedEventArgs2( // the properties in the base class have an internal setter public new int LineNumber { get; set; } public new int ColumnNumber { get; set; } + public string TaskAssemblyLocation { get; set; } } -} \ No newline at end of file +} diff --git a/src/StructuredLogger/Construction/Construction.cs b/src/StructuredLogger/Construction/Construction.cs index 9fc8c3195..1b63ff619 100644 --- a/src/StructuredLogger/Construction/Construction.cs +++ b/src/StructuredLogger/Construction/Construction.cs @@ -1151,7 +1151,9 @@ private Task CreateTask(TaskStartedEventArgs taskStartedEventArgs) { var taskName = Intern(taskStartedEventArgs.TaskName); - string assembly = GetTaskAssembly(taskName); + string assembly = taskStartedEventArgs is TaskStartedEventArgs2 taskStartedEventArgs2 && !string.IsNullOrEmpty(taskStartedEventArgs2.TaskAssemblyLocation) ? + taskStartedEventArgs2.TaskAssemblyLocation : + GetTaskAssembly(taskName); var taskId = taskStartedEventArgs.BuildEventContext.TaskId; var startTime = taskStartedEventArgs.Timestamp;