@@ -23,6 +23,7 @@ import {
23
23
languageServerDirectory ,
24
24
nugetTempPath ,
25
25
rootPath ,
26
+ devkitDependenciesDirectory ,
26
27
} from '../tasks/projectPaths' ;
27
28
import { getPackageJSON } from '../tasks/packageJson' ;
28
29
import { createPackageAsync } from '../tasks/vsceTasks' ;
@@ -122,27 +123,46 @@ gulp.task(
122
123
for ( const p of platformSpecificPackages ) {
123
124
await acquireRoslyn ( packageJSON , p . platformInfo , true ) ;
124
125
}
126
+
127
+ // Also pull in the Roslyn devkit dependencies nuget package.
128
+ await acquireRoslynDevkit ( packageJSON , true ) ;
125
129
} , 'installDependencies' )
126
130
) ;
127
131
128
132
// Install Tasks
129
133
async function installRoslyn ( packageJSON : any , platformInfo ?: PlatformInformation ) {
134
+ // Install the Roslyn language server bits.
130
135
const { packagePath, serverPlatform } = await acquireRoslyn ( packageJSON , platformInfo , false ) ;
136
+ await installNuGetPackage (
137
+ packagePath ,
138
+ path . join ( 'content' , 'LanguageServer' , serverPlatform ) ,
139
+ languageServerDirectory
140
+ ) ;
141
+
142
+ // Install Roslyn Devkit dependencies.
143
+ const roslynDevkitPackagePath = await acquireRoslynDevkit ( packageJSON , false ) ;
144
+ await installNuGetPackage ( roslynDevkitPackagePath , 'content' , devkitDependenciesDirectory ) ;
145
+ }
131
146
132
- // Get the directory containing the server executable for the current platform.
133
- const serverExecutableDirectory = path . join ( packagePath , 'content' , 'LanguageServer' , serverPlatform ) ;
134
- if ( ! fs . existsSync ( serverExecutableDirectory ) ) {
135
- throw new Error ( `Failed to find server executable directory at ${ serverExecutableDirectory } ` ) ;
147
+ async function installNuGetPackage ( pathToPackage : string , contentPath : string , outputPath : string ) {
148
+ // Get the directory containing the content.
149
+ const contentDirectory = path . join ( pathToPackage , contentPath ) ;
150
+ if ( ! fs . existsSync ( contentDirectory ) ) {
151
+ throw new Error ( `Failed to find NuGet package content at ${ contentDirectory } ` ) ;
136
152
}
137
153
138
- console . log ( `Extracting Roslyn executables from ${ serverExecutableDirectory } ` ) ;
154
+ const numFilesToCopy = fs . readdirSync ( contentDirectory ) . length ;
155
+
156
+ console . log ( `Extracting content from ${ contentDirectory } ` ) ;
139
157
140
158
// Copy the files to the language server directory.
141
- fs . mkdirSync ( languageServerDirectory ) ;
142
- fsextra . copySync ( serverExecutableDirectory , languageServerDirectory ) ;
143
- const languageServerDll = path . join ( languageServerDirectory , 'Microsoft.CodeAnalysis.LanguageServer.dll' ) ;
144
- if ( ! fs . existsSync ( languageServerDll ) ) {
145
- throw new Error ( `Failed to copy server executable` ) ;
159
+ fs . mkdirSync ( outputPath ) ;
160
+ fsextra . copySync ( contentDirectory , outputPath ) ;
161
+ const numCopiedFiles = fs . readdirSync ( outputPath ) . length ;
162
+
163
+ // Not expected to ever happen, just a simple sanity check.
164
+ if ( numFilesToCopy !== numCopiedFiles ) {
165
+ throw new Error ( 'Failed to copy all files from NuGet package' ) ;
146
166
}
147
167
}
148
168
@@ -173,6 +193,16 @@ async function acquireRoslyn(
173
193
return { packagePath, serverPlatform } ;
174
194
}
175
195
196
+ async function acquireRoslynDevkit ( packageJSON : any , interactive : boolean ) : Promise < string > {
197
+ const roslynVersion = packageJSON . defaults . roslyn ;
198
+ const packagePath = await acquireNugetPackage (
199
+ `Microsoft.VisualStudio.LanguageServices.Devkit` ,
200
+ roslynVersion ,
201
+ interactive
202
+ ) ;
203
+ return packagePath ;
204
+ }
205
+
176
206
async function installRazor ( packageJSON : any , platformInfo : PlatformInformation ) {
177
207
if ( platformInfo === undefined ) {
178
208
const platformNeutral = new PlatformInformation ( 'neutral' , 'neutral' ) ;
@@ -297,7 +327,14 @@ async function doPackageOffline(vsixPlatform: VSIXPlatformInfo | undefined) {
297
327
}
298
328
299
329
async function cleanAsync ( ) {
300
- await del ( [ 'install.*' , '.omnisharp*' , '.debugger' , '.razor' , languageServerDirectory ] ) ;
330
+ await del ( [
331
+ 'install.*' ,
332
+ '.omnisharp*' ,
333
+ '.debugger' ,
334
+ '.razor' ,
335
+ languageServerDirectory ,
336
+ devkitDependenciesDirectory ,
337
+ ] ) ;
301
338
}
302
339
303
340
async function buildVsix (
0 commit comments