@@ -150,12 +150,11 @@ module GraphBuildResult =
150150/// Uses <see cref="T:Microsoft.Build.Execution.BuildManager"/> to run builds.
151151/// This should be treated as a singleton because the BuildManager only allows one build request running at a time.
152152/// </summary>
153- type BuildManagerSession (? bm : BuildManager , ? buildParameters : BuildParameters ) =
153+ type BuildManagerSession (? bm : BuildManager ) =
154154 let locker = BuildManagerSession.locker
155155 let bm = defaultArg bm BuildManager.DefaultBuildManager
156- let buildParameters = defaultArg buildParameters ( BuildParameters( Loggers = [ ProjectLoader.ErrorLogger() ]))
157156
158- let tryGetErrorLogs () =
157+ let tryGetErrorLogs ( buildParameters : BuildParameters ) =
159158 buildParameters.Loggers
160159 |> Seq.tryPick (
161160 function
@@ -166,33 +165,34 @@ type BuildManagerSession(?bm: BuildManager, ?buildParameters: BuildParameters) =
166165 |> Seq.collect ( fun e -> e.Errors)
167166 |> Seq.toList
168167
169- let lockAndStartBuild ( ct : CancellationToken ) ( a : unit -> Task < _ >) =
168+ let lockAndStartBuild ( ct : CancellationToken ) buildParameters ( a : unit -> Task < _ >) =
170169 task {
171170 use! _lock = locker.LockAsync ct
172171 use _ = bm.StartBuild( buildParameters, ct)
173172 return ! a ()
174173 }
175174
176- member private x.determineBuildOutput < 'e when BuildResultFailure < 'e >>( result : BuildResult ) =
175+ member private x.determineBuildOutput < 'e when BuildResultFailure < 'e >>( buildParameters , result : BuildResult ) =
177176 match result.OverallResult with
178177 | BuildResultCode.Success -> Ok result
179- | _ -> Error( 'e.BuildFailure( result, tryGetErrorLogs () ))
178+ | _ -> Error( 'e.BuildFailure( result, tryGetErrorLogs buildParameters ))
180179
181180
182- member private x.determineGraphBuildOutput < 'e when GraphBuildResultFailure < 'e >>( result : GraphBuildResult ) =
181+ member private x.determineGraphBuildOutput < 'e when GraphBuildResultFailure < 'e >>( buildParameters , result : GraphBuildResult ) =
183182 match result.OverallResult with
184183 | BuildResultCode.Success -> Ok result
185- | _ -> Error( 'e.BuildFailure( result, tryGetErrorLogs () ))
184+ | _ -> Error( 'e.BuildFailure( result, tryGetErrorLogs buildParameters ))
186185
187186
188187 /// <summary>Submits a graph build request to the current build and starts it asynchronously.</summary>
189188 /// <param name="buildRequest">GraphBuildRequestData encapsulates all of the data needed to submit a graph build request.</param>
190189 /// <param name="ct">CancellationToken to cancel build submissions.</param>
191190 /// <returns>The BuildResult</returns>
192- member x.BuildAsync ( buildRequest : BuildRequestData , ? ct : CancellationToken ) =
191+ member x.BuildAsync ( buildRequest : BuildRequestData , ? buildParameters : BuildParameters , ? ct : CancellationToken ) =
193192 let ct = defaultArg ct CancellationToken.None
193+ let buildParameters = defaultArg buildParameters ( BuildParameters( Loggers = [ ProjectLoader.ErrorLogger() ]))
194194
195- lockAndStartBuild ct
195+ lockAndStartBuild ct buildParameters
196196 <| fun () ->
197197 task {
198198 let tcs = TaskCompletionSource<_> TaskCreationOptions.RunContinuationsAsynchronously
@@ -204,7 +204,7 @@ type BuildManagerSession(?bm: BuildManager, ?buildParameters: BuildParameters) =
204204 let result = sub.BuildResult
205205
206206 match result.Exception with
207- | null -> tcs.SetResult( x.determineBuildOutput result)
207+ | null -> tcs.SetResult( x.determineBuildOutput ( buildParameters , result) )
208208 | : ? Microsoft .Build .Exceptions .BuildAbortedException when ct .IsCancellationRequested -> tcs .SetCanceled ct
209209 | e -> tcs.SetException e
210210 ),
@@ -218,10 +218,11 @@ type BuildManagerSession(?bm: BuildManager, ?buildParameters: BuildParameters) =
218218 /// <param name="graphBuildRequest">GraphBuildRequestData encapsulates all of the data needed to submit a graph build request.</param>
219219 /// <param name="ct">CancellationToken to cancel build submissions.</param>
220220 /// <returns>the GraphBuildResult</returns>
221- member x.BuildAsync ( graphBuildRequest : GraphBuildRequestData , ? ct : CancellationToken ) =
221+ member x.BuildAsync ( graphBuildRequest : GraphBuildRequestData , ? buildParameters : BuildParameters , ? ct : CancellationToken ) =
222222 let ct = defaultArg ct CancellationToken.None
223+ let buildParameters = defaultArg buildParameters ( BuildParameters( Loggers = [ ProjectLoader.ErrorLogger() ]))
223224
224- lockAndStartBuild ct
225+ lockAndStartBuild ct buildParameters
225226 <| fun () ->
226227 task {
227228 let tcs = TaskCompletionSource<_> TaskCreationOptions.RunContinuationsAsynchronously
@@ -234,7 +235,7 @@ type BuildManagerSession(?bm: BuildManager, ?buildParameters: BuildParameters) =
234235 let result = sub.BuildResult
235236
236237 match result.Exception with
237- | null -> tcs.SetResult( x.determineGraphBuildOutput result)
238+ | null -> tcs.SetResult( x.determineGraphBuildOutput ( buildParameters , result) )
238239 | : ? Microsoft .Build .Exceptions .BuildAbortedException when ct .IsCancellationRequested -> tcs .SetCanceled ct
239240 | e -> tcs.SetException e
240241
@@ -361,7 +362,7 @@ type ProjectLoader2 =
361362
362363 ProjectLoader2.EvaluateAsGraph( projects, ?projectCollection = projectCollection, ?projectInstanceFactory = projectInstanceFactory)
363364
364- static member Execution ( session : BuildManagerSession , graph : ProjectGraph , ? targetsToBuild : string array , ? flags : BuildRequestDataFlags , ? ct : CancellationToken ) =
365+ static member Execution ( session : BuildManagerSession , graph : ProjectGraph , ? buildParameters : BuildParameters , ? targetsToBuild : string array , ? flags : BuildRequestDataFlags , ? ct : CancellationToken ) =
365366 task {
366367 let targetsToBuild = defaultArg targetsToBuild ( ProjectLoader.designTimeBuildTargets false )
367368
@@ -370,10 +371,10 @@ type ProjectLoader2 =
370371 let request =
371372 GraphBuildRequestData( projectGraph = graph, targetsToBuild = targetsToBuild, hostServices = null , flags = flags)
372373
373- return ! session.BuildAsync( request, ?ct = ct)
374+ return ! session.BuildAsync( request, ?buildParameters = buildParameters , ? ct = ct)
374375 }
375376
376- static member Execution ( session : BuildManagerSession , projectInstance : ProjectInstance , ? targetsToBuild : string array , ? flags : BuildRequestDataFlags , ? ct : CancellationToken ) =
377+ static member Execution ( session : BuildManagerSession , projectInstance : ProjectInstance , ? buildParameters : BuildParameters , ? targetsToBuild : string array , ? flags : BuildRequestDataFlags , ? ct : CancellationToken ) =
377378 task {
378379 let targetsToBuild = defaultArg targetsToBuild ( ProjectLoader.designTimeBuildTargets false )
379380
@@ -382,18 +383,18 @@ type ProjectLoader2 =
382383 let request =
383384 BuildRequestData( projectInstance = projectInstance, targetsToBuild = targetsToBuild, hostServices = null , flags = flags)
384385
385- return ! session.BuildAsync( request, ?ct = ct)
386+ return ! session.BuildAsync( request, ?buildParameters = buildParameters , ? ct = ct)
386387 }
387388
388- static member Execution ( session : BuildManagerSession , projectInstances : ProjectInstance seq , ? targetsToBuild : string array , ? flags : BuildRequestDataFlags , ? ct : CancellationToken ) =
389+ static member Execution ( session : BuildManagerSession , projectInstances : ( ProjectInstance * BuildParameters option ) seq , ? targetsToBuild : string array , ? flags : BuildRequestDataFlags , ? ct : CancellationToken ) =
389390 projectInstances
390- |> Seq.map ( fun p -> ProjectLoader2.Execution( session, p, ?targetsToBuild = targetsToBuild, ?flags = flags, ?ct = ct))
391+ |> Seq.map ( fun ( p , bp ) -> ProjectLoader2.Execution( session, p, ?buildParameters = bp , ?targetsToBuild = targetsToBuild, ?flags = flags, ?ct = ct))
391392 |> Task.WhenAll
392393
393- static member Execution ( session : BuildManagerSession , projects : Project seq , ? targetsToBuild : string array , ? flags : BuildRequestDataFlags , ? ct : CancellationToken ) =
394+ static member Execution ( session : BuildManagerSession , projects : ( Project * BuildParameters option ) seq , ? targetsToBuild : string array , ? flags : BuildRequestDataFlags , ? ct : CancellationToken ) =
394395 let instances =
395396 projects
396- |> Seq.map ( fun p -> p.CreateProjectInstance())
397+ |> Seq.map ( fun ( p , bp ) -> p.CreateProjectInstance(), bp )
397398
398399 ProjectLoader2.Execution( session, instances, ?targetsToBuild = targetsToBuild, ?flags = flags, ?ct = ct)
399400
0 commit comments