|
6 | 6 | using Buildalyzer.Logger;
|
7 | 7 | using Buildalyzer.Logging;
|
8 | 8 | using Microsoft.Build.Construction;
|
9 |
| -using Microsoft.Build.Framework; |
10 | 9 | using Microsoft.Build.Logging;
|
11 | 10 | using Microsoft.Extensions.Logging;
|
12 | 11 | using MsBuildPipeLogger;
|
@@ -148,61 +147,53 @@ public IAnalyzerResults Build(string targetFramework, BuildEnvironment buildEnvi
|
148 | 147 | private IAnalyzerResults BuildTargets(
|
149 | 148 | BuildEnvironment buildEnvironment, string targetFramework, string[] targetsToBuild, AnalyzerResults results)
|
150 | 149 | {
|
151 |
| - using (CancellationTokenSource cancellation = new CancellationTokenSource()) |
152 |
| - { |
153 |
| - using var pipeLogger = new AnonymousPipeLoggerServer(cancellation.Token); |
154 |
| - bool receivedAnyEvent = false; |
155 |
| - |
156 |
| - void OnPipeLoggerOnAnyEventRaised(object o, BuildEventArgs buildEventArgs) |
157 |
| - { |
158 |
| - receivedAnyEvent = true; |
159 |
| - } |
160 |
| - |
161 |
| - pipeLogger.AnyEventRaised += OnPipeLoggerOnAnyEventRaised; |
| 150 | + using var cancellation = new CancellationTokenSource(); |
162 | 151 |
|
163 |
| - using var eventProcessor = new EventProcessor(Manager, this, BuildLoggers, pipeLogger, results != null); |
| 152 | + using var pipeLogger = new AnonymousPipeLoggerServer(cancellation.Token); |
| 153 | + using var eventCollector = new BuildEventArgsCollector(pipeLogger); |
| 154 | + using var eventProcessor = new EventProcessor(Manager, this, BuildLoggers, pipeLogger, true); |
164 | 155 |
|
165 |
| - // Run MSBuild |
166 |
| - int exitCode; |
167 |
| - string fileName = GetCommand( |
168 |
| - buildEnvironment, |
169 |
| - targetFramework, |
170 |
| - targetsToBuild, |
171 |
| - pipeLogger.GetClientHandle(), |
172 |
| - out string arguments); |
173 |
| - |
174 |
| - using (ProcessRunner processRunner = new ProcessRunner( |
175 |
| - fileName, |
176 |
| - arguments, |
177 |
| - buildEnvironment.WorkingDirectory ?? Path.GetDirectoryName(ProjectFile.Path), |
178 |
| - GetEffectiveEnvironmentVariables(buildEnvironment), |
179 |
| - Manager.LoggerFactory)) |
| 156 | + // Run MSBuild |
| 157 | + int exitCode; |
| 158 | + string fileName = GetCommand( |
| 159 | + buildEnvironment, |
| 160 | + targetFramework, |
| 161 | + targetsToBuild, |
| 162 | + pipeLogger.GetClientHandle(), |
| 163 | + out string arguments); |
| 164 | + |
| 165 | + using var processRunner = new ProcessRunner( |
| 166 | + fileName, |
| 167 | + arguments, |
| 168 | + buildEnvironment.WorkingDirectory ?? Path.GetDirectoryName(ProjectFile.Path)!, |
| 169 | + GetEffectiveEnvironmentVariables(buildEnvironment)!, |
| 170 | + Manager.LoggerFactory); |
| 171 | + |
| 172 | + void OnProcessRunnerExited() |
| 173 | + { |
| 174 | + if (eventCollector.IsEmpty && processRunner.ExitCode != 0) |
180 | 175 | {
|
181 |
| - void OnProcessRunnerExited() |
182 |
| - { |
183 |
| - if (!receivedAnyEvent && processRunner.ExitCode != 0) |
184 |
| - { |
185 |
| - pipeLogger.Dispose(); |
186 |
| - } |
187 |
| - } |
188 |
| - |
189 |
| - processRunner.Exited += OnProcessRunnerExited; |
190 |
| - processRunner.Start(); |
191 |
| - try |
192 |
| - { |
193 |
| - pipeLogger.ReadAll(); |
194 |
| - } |
195 |
| - catch (ObjectDisposedException) |
196 |
| - { |
197 |
| - // Ignore |
198 |
| - } |
199 |
| - processRunner.WaitForExit(); |
200 |
| - exitCode = processRunner.ExitCode; |
| 176 | + pipeLogger.Dispose(); |
201 | 177 | }
|
| 178 | + } |
202 | 179 |
|
203 |
| - // Collect the results |
204 |
| - results?.Add(eventProcessor.Results, exitCode == 0 && eventProcessor.OverallSuccess); |
| 180 | + processRunner.Exited += OnProcessRunnerExited; |
| 181 | + processRunner.Start(); |
| 182 | + try |
| 183 | + { |
| 184 | + pipeLogger.ReadAll(); |
| 185 | + } |
| 186 | + catch (ObjectDisposedException) |
| 187 | + { |
| 188 | + // Ignore |
205 | 189 | }
|
| 190 | + processRunner.WaitForExit(); |
| 191 | + exitCode = processRunner.ExitCode; |
| 192 | + results.BuildEventArguments = [.. eventCollector]; |
| 193 | + |
| 194 | + // Collect the results |
| 195 | + results.Add(eventProcessor.Results, exitCode == 0 && eventProcessor.OverallSuccess); |
| 196 | + |
206 | 197 | return results;
|
207 | 198 | }
|
208 | 199 |
|
|
0 commit comments