Определение текущей версии пакета VSIX из кода
Я пишу проект VSIX и хотел бы, чтобы код мог определить, доступно ли обновление.
Я знаю, что Visual Studio сможет проверить наличие обновления, однако я хотел бы, чтобы расширение могло более подробно запрашивать пользователя (разработчика).
- интересно, как заставить расширение прочитать свою собственную версию из манифеста пакета?
Спасибо.
2 ответа:
Я обнаружил, что могу читать информацию о версии непосредственно из 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");
Я также написал gist C# class code, который инкапсулирует приведенный выше код. Кроме того, версия, этот метод может быть использован для получения другой информации, предоставляемой файлом манифеста.
Решение 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;
Я вызываю этот метод внутри
Initialize()
моего пакета.