Change:
this.logService.info('Installing the extension without checking dependencies and pack', installExtensionTask.identifier.id); } else { try { <del> const allDepsAndPackExtensionsToInstall = await this.getAllDepsAndPackExtensionsToInstall(installExtensionTask.identifier, manifest, !!options.installOnlyNewlyAddedFromExtensionPack, !!options.installPreReleaseVersion, options.profileLocation); </del> <ins> const allDepsAndPackExtensionsToInstall = await this.getAllDepsAndPackExtensions(installExtensionTask.identifier, manifest, !!options.installOnlyNewlyAddedFromExtensionPack, !!options.installPreReleaseVersion, options.profileLocation); const installed = await this.getInstalled(undefined, options.profileLocation); </ins> for (const { gallery, manifest } of allDepsAndPackExtensionsToInstall) { installExtensionHasDependents = installExtensionHasDependents || !!manifest.extensionDependencies?.some(id => areSameExtensions({ id }, installExtensionTask.identifier)); const key = getInstallExtensionTaskKey(gallery); <del> if (this.installingExtensions.has(key)) { this.logService.info('Extension is already requested to install', gallery.identifier.id); } else { </del> <ins> const existingInstallingExtension = this.installingExtensions.get(key); if (existingInstallingExtension) { if (this.canWaitForTask(installExtensionTask, existingInstallingExtension.task)) { this.logService.info('Waiting for already requested installing extension', gallery.identifier.id, installExtensionTask.identifier.id); existingInstallingExtension.waitingTasks.push(installExtensionTask); const identifier = existingInstallingExtension.task.identifier; // add promise that waits until the extension is completely installed, ie., onDidInstallExtensions event is triggered for this extension alreadyRequestedInstallations.push( Event.toPromise( Event.filter(this.onDidInstallExtensions, results => results.some(result => areSameExtensions(result.identifier, identifier))) ).then(results => { const result = results.find(result => areSameExtensions(result.identifier, identifier)); if (!result?.local) { // Extension failed to install throw new Error(`Extension ${identifier.id} is not installed`); } })); } } else if (!installed.some(({ identifier }) => areSameExtensions(identifier, gallery.identifier))) { </ins> const task = this.createInstallExtensionTask(manifest, gallery, { ...options, donotIncludePackAndDependencies: true }); <del> this.installingExtensions.set(key, task); </del> <ins> this.installingExtensions.set(key, { task, waitingTasks: [installExtensionTask] }); </ins> this._onInstallExtension.fire({ identifier: task.identifier, source: gallery, profileLocation: options.profileLocation }); <del> this.logService.info('Installing extension:', task.identifier.id); </del> <ins> this.logService.info('Installing extension:', task.identifier.id, installExtensionTask.identifier.id); </ins> allInstallExtensionTasks.push({ task, manifest }); } }

Discussion:
VS Code Version: stable and from sources When launching the server and installing extensions using that have a common dependency, one of the extensions will fail activating, prompting to reload VS Code. For example installing, and contains which depends on also depends on installation task finishes first and then trying to activate fails as for installation which is part of installation task Steps to Reproduce: this branch in gitpod or codespaces will fail activating and a notification shows prompting to reload vscode <img width="448" alt="error_iamge" src="https://user-"cc
would you accept a PR fixing this? I took a look but it doesn't look something trivial to fix properly, I but I don't think is a good fix
PR would be always welcome. Agreed it is not trivial. Let's see if there is a simple fix that fixes this and won't cause any regressions.
Created a PR with a possible fix
ping, by any chance for July
I am sorry that I am on vacation so cannot be looked in July.
I was following this other , but it was marked as a duplicate and was therefore closed. This isse seems to be closed as well, although the issue persists. Specifically, it seems that VS Code Dev Containers installs extensions in alphabetical order, so that if an extension that comes later in the order is a pre-requisite for another that is earlier, then the installations will not behave as expected. Example, is a pre-requisite for , but comes later in alphabetical order. Thus, requires a VS Code Session restart after building the Dev Container. Is this issue fixed in VS Code Insiders, but not released yet?
The issue you reported is using the build 1.71. and this fix was pushed in 1.72.. So please update your VS Code and try.