@@ -30,8 +30,8 @@ export default function registerCommands(server: OmnisharpServer, extensionPath:
3030
3131 // register two commands for running and debugging xunit tests
3232 let d6 = dotnetTest . registerDotNetTestRunCommand ( server ) ;
33- let d7 = dotnetTest . registerDotNetTestDebugCommand ( server ) ;
34-
33+ let d7 = dotnetTest . registerDotNetTestDebugCommand ( server ) ;
34+
3535 // register process picker for attach
3636 let attachItemsProvider = DotNetAttachItemsProviderFactory . Get ( ) ;
3737 let attacher = new AttachPicker ( attachItemsProvider ) ;
@@ -92,7 +92,7 @@ function projectsToCommands(projects: protocol.DotNetProject[]): Promise<Command
9292 label : `dotnet restore - (${ project . Name || path . basename ( project . Path ) } )` ,
9393 description : projectDirectory ,
9494 execute ( ) {
95- return runDotnetRestore ( projectDirectory ) ;
95+ return dotnetRestore ( projectDirectory ) ;
9696 }
9797 } ;
9898 } ) ;
@@ -107,7 +107,7 @@ export function dotnetRestoreAllProjects(server: OmnisharpServer) {
107107
108108 return serverUtils . requestWorkspaceInformation ( server ) . then ( info => {
109109
110- if ( ! ( 'DotNet in info' ) || info . DotNet . Projects . length < 1 ) {
110+ if ( ! info . DotNet || info . DotNet . Projects . length < 1 ) {
111111 return Promise . reject ( "No .NET Core projects found" ) ;
112112 }
113113
@@ -131,36 +131,55 @@ export function dotnetRestoreForProject(server: OmnisharpServer, fileName: strin
131131
132132 return serverUtils . requestWorkspaceInformation ( server ) . then ( info => {
133133
134- if ( ! ( 'DotNet in info' ) || info . DotNet . Projects . length < 1 ) {
134+ if ( ! info . DotNet || info . DotNet . Projects . length < 1 ) {
135135 return Promise . reject ( "No .NET Core projects found" ) ;
136136 }
137137
138138 let directory = path . dirname ( fileName ) ;
139139
140140 for ( let project of info . DotNet . Projects ) {
141141 if ( project . Path === directory ) {
142- return runDotnetRestore ( directory , fileName ) ;
142+ return dotnetRestore ( directory , fileName ) ;
143143 }
144144 }
145145 } ) ;
146146}
147147
148- function runDotnetRestore ( cwd : string , fileName ?: string ) {
149- return new Promise < cp . ChildProcess > ( ( resolve , reject ) => {
148+ function dotnetRestore ( cwd : string , fileName ?: string ) {
149+ return new Promise < void > ( ( resolve , reject ) => {
150150 channel . clear ( ) ;
151151 channel . show ( ) ;
152152
153- let cmd = 'dotnet restore' ;
153+ let cmd = 'dotnet' ;
154+ let args = [ 'restore' ] ;
155+
154156 if ( fileName ) {
155- cmd = ` ${ cmd } " ${ fileName } "`
157+ args . push ( fileName ) ;
156158 }
157159
158- return cp . exec ( cmd , { cwd : cwd , env : process . env } , ( err , stdout , stderr ) => {
159- channel . append ( stdout . toString ( ) ) ;
160- channel . append ( stderr . toString ( ) ) ;
161- if ( err ) {
162- channel . append ( 'ERROR: ' + err ) ;
163- }
160+ let dotnet = cp . spawn ( cmd , args , { cwd : cwd , env : process . env } ) ;
161+
162+ function handleData ( stream : NodeJS . ReadableStream ) {
163+ stream . on ( 'data' , chunk => {
164+ channel . append ( chunk . toString ( ) ) ;
165+ } ) ;
166+
167+ stream . on ( 'err' , err => {
168+ channel . append ( `ERROR: ${ err } ` ) ;
169+ } ) ;
170+ }
171+
172+ handleData ( dotnet . stdout ) ;
173+ handleData ( dotnet . stderr ) ;
174+
175+ dotnet . on ( 'close' , ( code , signal ) => {
176+ channel . appendLine ( `Done: ${ code } .` ) ;
177+ resolve ( ) ;
178+ } ) ;
179+
180+ dotnet . on ( 'error' , err => {
181+ channel . appendLine ( `ERROR: ${ err } ` ) ;
182+ reject ( err )
164183 } ) ;
165184 } ) ;
166185}
0 commit comments