从代码中检测当前VSIX包的版本

Nor*_*din 2 c# vspackage visual-studio vsix

我正在编写一个VSIX项目,我希望代码能够确定更新是否可用.

我知道Visual Studio可以检查更新,但是,我希望扩展能够更详细地提示用户(开发人员).

  1. 我想知道如何让扩展从包清单中读取自己的版本?

谢谢.

Nor*_*din 7

我发现我可以直接从清单XML文件中读取版本信息.

        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");
Run Code Online (Sandbox Code Playgroud)

我还写了一个gist C#类代码,它封装了上面的代码.此外,版本,此技术可用于获取清单文件提供的其他信息.


Дми*_*нко 5

Nordin的解决方案似乎很好,但我只想提一下,还有一种方法可以获得当前版本的扩展.我不知道在什么情况下我的解决方案可能会更好,也许如果你不知道使用这个扩展客户端上的路径清单.

// 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;
Run Code Online (Sandbox Code Playgroud)

我在Initialize()我的包里面调用了这个方法.

  • 缺少一件事,这个dll作为添加的引用是不可见的,你需要通过浏览从以下位置添加它 - C:\ Windows\Microsoft.NET\assembly\GAC_MSIL\Microsoft.VisualStudio.ExtensionManager\{您要使用的版本}\Microsoft.VisualStudio.ExtensionManager.dll (2认同)