Change:
<!-- Do Not Delete This! featurerequesttemplate --<!-- Please read our Rules of Conduct: --<!-- Please search existing issues to avoid creating duplicates. --<!-- Describe the feature you'd like. --When developing an extension, I sometimes mess around with versions, e.g. install an (unpublished) extension with different content using the same version, or going back a version. It can happen then that I can install the extension (via file) successfully, the extension appears, I get the notification to reload VSCode which I accept, and the extension is gone after the reload. It does not load, and it does not appear in the list of installed extensions. There is no warning nor any trace in the extension host output pane. I recently figured out that this appears to be caused by an auto-generated entry in the file, listing the installed version of my extension. There might be a bug here, since it also lists the highest version ever installed. However, this feature request is about the lack of notifications why the extension is not loaded. I would appreciate if you could tell the user, e.g. via a warning during install and maybe during every load, that an extension has been blocked because it's obsolete. Furthermore I suggest listing the extension as installed in the extension pane, as deactivated/obsolete with a warning attached to it.
Can you please provide exact steps to reproduce this behaviour?
I did not mean this as a bug report, but rather as a request to add additional messages telling the user what's going on. However, I've tried to reproduce it and it seems you can get this issue if you do: a for some extension E in version 0.0.1 E in version 0.0.1 from vsix (I'm doing this on a remote machine using the Remote SSH extension). . a for E in version 0.0.2 E in version 0.0.2 that now contains an entry making E in version 0.0.1 obsolete . E in version 0.0.1 . that now contains both an entry making E in version 0.0.1 obsolete as well as version 0.0.2 obsolete. that the extension is not loaded. At this point, you can also install E in version 0.0.2 and it still won't load.
I am not seeing this behaviour. When I install 0.0.1, .obsolete file now contains 0.0.2 version only.
Sorry for taking so long to answer. I've now taken a fresh VM (Ubuntu 22.04) and a new extension (, just modified the so it would package) and could reproduce it. No "Remote - SSH" involved either. The steps: Generate two versions of an extension, 0.0.1 and 0.0.2 Install VS Code. At this point, does not exist yet. Install 0.0.1 and reload. Install 0.0.2 and reload. This creates the file with a single entry . Install 0.0.1 and reload. The file now contains . The extension is not loaded and does not appear in the list of installed extensions. Even if you "only" end up with an entry for version 0.0.2, this would still probably cause an issue if you try to re-install 0.0.2 since there are no diagnostics emitted - neither during installation nor during startup.
Ok there is a bug at the last step - Installing 0.0.1 shall not add 0.0.1 to the file. This bug happens only when the has no set. Can you please set the property in the and retry?
To verify: Formulate an extension without property in Generate a VSIX 0.0.1 with version Generate a VSIX 0.0.2 with version Install VSIX 0.0.1 and make sure 0.0.1 version is installed Install VSIX 0.0.2 and make sure 0.0.2 version is installed Again Install VSIX 0.0.1 and make sure 0.0.1 version is installed

Discussion:
import { compareIgnoreCase } from 'vs/base/common/strings'; import { IExtensionIdentifier, IGalleryExtension, ILocalExtension, getTargetPlatform } from 'vs/platform/extensionManagement/common/extensionManagement'; <del> import { ExtensionIdentifier, IExtension, TargetPlatform } from 'vs/platform/extensions/common/extensions'; </del> <ins> import { ExtensionIdentifier, IExtension, TargetPlatform, UNDEFINED_PUBLISHER } from 'vs/platform/extensions/common/extensions'; </ins> import { IFileService } from 'vs/platform/files/common/files'; import { isLinux, platform } from 'vs/base/common/platform'; import { URI } from 'vs/base/common/uri';

return id.toLocaleLowerCase(); } <del> export function getGalleryExtensionId(publisher: string, name: string): string { return adoptToGalleryExtensionId(getExtensionId(publisher, name)); </del> <ins> export function getGalleryExtensionId(publisher: string | undefined, name: string): string { return adoptToGalleryExtensionId(getExtensionId(publisher ?? UNDEFINED_PUBLISHER, name)); </ins> } export function groupByExtension<T>(extensions: T[], getExtensionIdentifier: (t: T) => IExtensionIdentifier): T[][] {