11using BaseProtocol ;
22using bsp4csharp . Protocol ;
33using Microsoft . Build . Evaluation ;
4- using dotnet_bsp . Logging ;
4+ using Microsoft . Build . Execution ;
55using Microsoft . Build . Graph ;
6+ using dotnet_bsp . Logging ;
67
78namespace dotnet_bsp . Handlers ;
89
@@ -23,7 +24,7 @@ public Task<CompileResult> HandleRequestAsync(CompileParams compileParams, Reque
2324
2425 var projects = new ProjectCollection ( ) ;
2526 var buildResult = true ;
26- var targetFiles = compileParams . Targets . Select ( x => x . ToString ( ) ) ;
27+ var targetFiles = BuildHelper . ExtractProjectsFromSolutions ( compileParams . Targets ) ;
2728 var graph = new ProjectGraph ( targetFiles , projects ) ;
2829 var initParams = _initializeManager . GetInitializeParams ( ) ;
2930 if ( initParams . RootUri . IsFile )
@@ -32,27 +33,24 @@ public Task<CompileResult> HandleRequestAsync(CompileParams compileParams, Reque
3233 context . Logger . LogInformation ( "GetLoadedProjects from {}" , workspacePath ) ;
3334 _baseProtocolClientManager . SendClearDiagnosticsMessage ( ) ;
3435
35- foreach ( var proj in graph . ProjectNodesTopologicallySorted )
36- {
37- var globalProps = proj . ProjectInstance . GlobalProperties
38- . Select ( x => string . Format ( "{0}={1}" , x . Key , x . Value ) )
39- . ToArray ( ) ;
40- context . Logger . LogInformation ( "Global Properties: {}" , string . Join ( "\n " , globalProps ) ) ;
41- context . Logger . LogInformation ( "Start restore target: {}" , proj . ProjectInstance . FullPath ) ;
42- var msBuildLogger = new MSBuildLogger ( _baseProtocolClientManager , compileParams . OriginId , workspacePath ) ;
43- var result = proj . ProjectInstance . Build ( [ "Restore" ] , [ msBuildLogger ] ) ;
44- context . Logger . LogInformation ( $ "{ proj . ProjectInstance . FullPath } restore result: { result } ") ;
45- buildResult &= result ;
46- }
47-
48- foreach ( var proj in graph . ProjectNodesTopologicallySorted )
49- {
50- context . Logger . LogInformation ( "Start building target: {}" , proj . ProjectInstance . FullPath ) ;
51- var msBuildLogger = new MSBuildLogger ( _baseProtocolClientManager , compileParams . OriginId , workspacePath ) ;
52- var result = proj . ProjectInstance . Build ( [ "Build" ] , [ msBuildLogger ] ) ;
53- context . Logger . LogInformation ( $ "{ proj . ProjectInstance . FullPath } build result: { result } ") ;
54- buildResult &= result ;
55- }
36+ var buildManager = _initializeManager . GetBuildManager ( ) ;
37+ buildManager . BeginBuild ( new BuildParameters
38+ {
39+ Loggers = [
40+ new MSBuildLogger ( _baseProtocolClientManager , compileParams . OriginId , workspacePath )
41+ ] ,
42+ } ,
43+ [ ] ) ;
44+
45+ context . Logger . LogInformation ( "Start restore targets: {}" , targetFiles ) ;
46+ var graphRestoreResult = buildManager . BuildRequest ( new GraphBuildRequestData ( graph , [ "Restore" ] ) ) ;
47+ context . Logger . LogInformation ( "Restore result: {}" , graphRestoreResult . OverallResult ) ;
48+ buildResult &= ( graphRestoreResult . OverallResult == BuildResultCode . Success ) ;
49+ context . Logger . LogInformation ( "Start building targets: {}" , targetFiles ) ;
50+ var graphBuildResult = buildManager . BuildRequest ( new GraphBuildRequestData ( graph , [ "Build" ] ) ) ;
51+ context . Logger . LogInformation ( "Build result: {}" , graphBuildResult . OverallResult ) ;
52+ buildResult &= ( graphBuildResult . OverallResult == BuildResultCode . Success ) ;
53+ buildManager . EndBuild ( ) ;
5654 }
5755
5856 return Task . FromResult ( new CompileResult
0 commit comments