@@ -68,21 +68,9 @@ public ProjectCreator TryBuild(string target, out bool result, out BuildOutput b
68
68
/// <returns>The current <see cref="ProjectCreator"/>.</returns>
69
69
public ProjectCreator TryBuild ( bool restore , string target , out bool result , out BuildOutput buildOutput )
70
70
{
71
- if ( restore )
72
- {
73
- TryRestore ( out result , out buildOutput ) ;
74
-
75
- if ( ! result )
76
- {
77
- return this ;
78
- }
79
- }
80
- else
81
- {
82
- buildOutput = BuildOutput . Create ( ) ;
83
- }
71
+ buildOutput = BuildOutput . Create ( ) ;
84
72
85
- Build ( target . ToArrayWithSingleElement ( ) , buildOutput , out result , out _ ) ;
73
+ Build ( restore , target . ToArrayWithSingleElement ( ) , buildOutput , out result , out _ ) ;
86
74
87
75
return this ;
88
76
}
@@ -140,21 +128,9 @@ public ProjectCreator TryBuild(out bool result, out BuildOutput buildOutput)
140
128
/// <returns>The current <see cref="ProjectCreator"/>.</returns>
141
129
public ProjectCreator TryBuild ( bool restore , out bool result , out BuildOutput buildOutput )
142
130
{
143
- if ( restore )
144
- {
145
- TryRestore ( out result , out buildOutput ) ;
146
-
147
- if ( ! result )
148
- {
149
- return this ;
150
- }
151
- }
152
- else
153
- {
154
- buildOutput = BuildOutput . Create ( ) ;
155
- }
131
+ buildOutput = BuildOutput . Create ( ) ;
156
132
157
- Build ( null , buildOutput , out result , out _ ) ;
133
+ Build ( restore , null , buildOutput , out result , out _ ) ;
158
134
159
135
return this ;
160
136
}
@@ -210,21 +186,9 @@ public ProjectCreator TryBuild(string[] targets, out bool result, out BuildOutpu
210
186
/// <returns>The current <see cref="ProjectCreator"/>.</returns>
211
187
public ProjectCreator TryBuild ( bool restore , string [ ] targets , out bool result , out BuildOutput buildOutput , out IDictionary < string , TargetResult > targetOutputs )
212
188
{
213
- if ( restore )
214
- {
215
- TryRestore ( out result , out buildOutput , out targetOutputs ) ;
216
-
217
- if ( ! result )
218
- {
219
- return this ;
220
- }
221
- }
222
- else
223
- {
224
- buildOutput = BuildOutput . Create ( ) ;
225
- }
189
+ buildOutput = BuildOutput . Create ( ) ;
226
190
227
- Build ( targets , buildOutput , out result , out targetOutputs ) ;
191
+ Build ( restore , targets , buildOutput , out result , out targetOutputs ) ;
228
192
229
193
return this ;
230
194
}
@@ -286,73 +250,43 @@ public ProjectCreator TryRestore(out bool result, out BuildOutput buildOutput)
286
250
/// <returns>The current <see cref="ProjectCreator"/>.</returns>
287
251
public ProjectCreator TryRestore ( out bool result , out BuildOutput buildOutput , out IDictionary < string , TargetResult > targetOutputs )
288
252
{
289
- Save ( ) ;
290
-
291
253
buildOutput = BuildOutput . Create ( ) ;
292
254
293
255
lock ( BuildManager . DefaultBuildManager )
294
256
{
295
- BuildRequestData restoreRequest = new BuildRequestData (
296
- FullPath ,
297
- new Dictionary < string , string >
298
- {
299
- [ "ExcludeRestorePackageImports" ] = "true" ,
300
- [ "MSBuildRestoreSessionId" ] = Guid . NewGuid ( ) . ToString ( "D" ) ,
301
- } ,
302
- ProjectCollection . DefaultToolsVersion ,
303
- targetsToBuild : new [ ] { "Restore" } ,
304
- hostServices : null ,
305
- flags : BuildRequestDataFlags . ClearCachesAfterBuild | BuildRequestDataFlags . SkipNonexistentTargets | BuildRequestDataFlags . IgnoreMissingEmptyAndInvalidImports ) ;
306
-
307
257
BuildParameters buildParameters = new BuildParameters
308
258
{
309
- Loggers = new List < Framework . ILogger >
310
- {
311
- buildOutput ,
312
- } ,
259
+ Loggers = new List < Framework . ILogger > ( ProjectCollection . Loggers . Concat ( buildOutput . AsEnumerable ( ) ) ) ,
313
260
} ;
314
261
315
262
BuildManager . DefaultBuildManager . BeginBuild ( buildParameters ) ;
263
+
316
264
try
317
265
{
318
- BuildSubmission buildSubmission = BuildManager . DefaultBuildManager . PendBuildRequest ( restoreRequest ) ;
319
-
320
- BuildResult buildResult = buildSubmission . Execute ( ) ;
321
-
322
- result = buildResult . OverallResult == BuildResultCode . Success ;
323
-
324
- targetOutputs = buildResult . ResultsByTarget ;
266
+ Restore ( out result , out targetOutputs ) ;
325
267
}
326
268
finally
327
269
{
328
270
BuildManager . DefaultBuildManager . EndBuild ( ) ;
329
271
}
330
272
}
331
273
332
- Project . MarkDirty ( ) ;
333
-
334
- Project . ReevaluateIfNecessary ( ) ;
335
-
336
274
return this ;
337
275
}
338
276
339
277
private void Build ( string [ ] targets , out bool result , out BuildOutput buildOutput , out IDictionary < string , TargetResult > targetOutputs )
340
278
{
341
279
buildOutput = BuildOutput . Create ( ) ;
342
280
343
- Build ( targets , buildOutput , out result , out targetOutputs ) ;
281
+ Build ( restore : false , targets , buildOutput , out result , out targetOutputs ) ;
344
282
}
345
283
346
- private void Build ( string [ ] targets , BuildOutput buildOutput , out bool result , out IDictionary < string , TargetResult > targetOutputs )
284
+ private void Build ( bool restore , string [ ] targets , BuildOutput buildOutput , out bool result , out IDictionary < string , TargetResult > targetOutputs )
347
285
{
286
+ targetOutputs = null ;
287
+
348
288
lock ( BuildManager . DefaultBuildManager )
349
289
{
350
- BuildRequestData restoreRequest = new BuildRequestData (
351
- ProjectInstance ,
352
- targetsToBuild : targets ?? ProjectInstance . DefaultTargets . ToArray ( ) ,
353
- hostServices : null ,
354
- flags : BuildRequestDataFlags . ReplaceExistingProjectInstance ) ;
355
-
356
290
BuildParameters buildParameters = new BuildParameters
357
291
{
358
292
Loggers = new List < Framework . ILogger > ( ProjectCollection . Loggers . Concat ( buildOutput . AsEnumerable ( ) ) ) ,
@@ -361,19 +295,77 @@ private void Build(string[] targets, BuildOutput buildOutput, out bool result, o
361
295
BuildManager . DefaultBuildManager . BeginBuild ( buildParameters ) ;
362
296
try
363
297
{
364
- BuildSubmission buildSubmission = BuildManager . DefaultBuildManager . PendBuildRequest ( restoreRequest ) ;
298
+ if ( restore )
299
+ {
300
+ Restore ( out result , out targetOutputs ) ;
301
+
302
+ if ( ! result )
303
+ {
304
+ return ;
305
+ }
306
+ }
307
+
308
+ BuildRequestData buildRequestData = new BuildRequestData (
309
+ ProjectInstance ,
310
+ targetsToBuild : targets ?? ProjectInstance . DefaultTargets . ToArray ( ) ,
311
+ hostServices : null ,
312
+ flags : BuildRequestDataFlags . ReplaceExistingProjectInstance ) ;
313
+
314
+ BuildSubmission buildSubmission = BuildManager . DefaultBuildManager . PendBuildRequest ( buildRequestData ) ;
365
315
366
316
BuildResult buildResult = buildSubmission . Execute ( ) ;
367
317
368
318
result = buildResult . OverallResult == BuildResultCode . Success ;
369
319
370
- targetOutputs = buildResult . ResultsByTarget ;
320
+ if ( targetOutputs != null )
321
+ {
322
+ foreach ( KeyValuePair < string , TargetResult > targetResult in buildResult . ResultsByTarget )
323
+ {
324
+ targetOutputs [ targetResult . Key ] = targetResult . Value ;
325
+ }
326
+ }
327
+ else
328
+ {
329
+ targetOutputs = buildResult . ResultsByTarget ;
330
+ }
371
331
}
372
332
finally
373
333
{
374
334
BuildManager . DefaultBuildManager . EndBuild ( ) ;
375
335
}
376
336
}
377
337
}
338
+
339
+ private void Restore ( out bool result , out IDictionary < string , TargetResult > targetOutputs )
340
+ {
341
+ Save ( ) ;
342
+
343
+ IDictionary < string , string > globalProperties = new Dictionary < string , string > ( ProjectCollection . GlobalProperties ) ;
344
+
345
+ globalProperties [ "ExcludeRestorePackageImports" ] = "true" ;
346
+ globalProperties [ "MSBuildRestoreSessionId" ] = Guid . NewGuid ( ) . ToString ( "D" ) ;
347
+
348
+ BuildRequestData buildRequestData = new BuildRequestData (
349
+ FullPath ,
350
+ globalProperties ,
351
+ ProjectCollection . DefaultToolsVersion ,
352
+ targetsToBuild : new [ ] { "Restore" } ,
353
+ hostServices : null ,
354
+ flags : BuildRequestDataFlags . ClearCachesAfterBuild | BuildRequestDataFlags . SkipNonexistentTargets | BuildRequestDataFlags . IgnoreMissingEmptyAndInvalidImports ) ;
355
+
356
+ BuildSubmission buildSubmission = BuildManager . DefaultBuildManager . PendBuildRequest ( buildRequestData ) ;
357
+
358
+ BuildResult buildResult = buildSubmission . Execute ( ) ;
359
+
360
+ Project . MarkDirty ( ) ;
361
+
362
+ Project . ReevaluateIfNecessary ( ) ;
363
+
364
+ _projectInstance = Project . CreateProjectInstance ( ) ;
365
+
366
+ targetOutputs = buildResult . ResultsByTarget ;
367
+
368
+ result = buildResult . OverallResult == BuildResultCode . Success ;
369
+ }
378
370
}
379
371
}
0 commit comments