Detect current VSIX package's version from code

前端 未结 2 2007
隐瞒了意图╮
隐瞒了意图╮ 2021-01-14 14:30

I am writing a VSIX project and I would like for the code to be able to determine whether an update is available.

I know Visual Studio would be able to check for the

相关标签:
2条回答
  • 2021-01-14 14:41

    Nordin's solution seems good, but I just want to mention that there is one more way to get current version of the extension. I have no idea in what situation my solution might be better, maybe if you don't know the path to the manifest on the client that uses this extension.

    // get ExtensionManager
    IVsExtensionManager manager = GetService(typeof(SVsExtensionManager)) as IVsExtensionManager;
    // get your extension by Product Id
    IInstalledExtension myExtension = manager.GetInstalledExtension("ProductId-1234-1234-1234-123456789012");
    // get current version
    Version currentVersion = myExtension.Header.Version;
    

    I call this inside Initialize() method of my package.

    0 讨论(0)
  • 2021-01-14 14:53

    I found that I could read the version information directly from the manifest XML file.

            var doc = new XmlDocument();
            doc.Load(manifestPath);
            var metaData = doc.DocumentElement.ChildNodes.Cast<XmlElement>().First(x => x.Name == "Metadata");
            var identity = metaData.ChildNodes.Cast<XmlElement>().First(x => x.Name == "Identity");
            var version = identity.GetAttribute("Version");
    

    I also wrote a gist C# class code that encapsulate the code above. Besides, version, this technique could be used to get other information provided by the manifest file.

    0 讨论(0)
提交回复
热议问题