Регистрация распакованного расширения VSIX через MSI без использования devenv / setup
У нас есть расширение Visual Studio, которое в настоящее время установлено вместе с MSI, поскольку после установки нам нужно выполнять определенные задачи (ngen, регистрация определенных COM-серверов и т. Д.). В конце установки запускаемdevenv.exe /setup
(более конкретно,devenv.exe /setup /nosetupvstemplates
чтобы сделать это немного быстрее) зарегистрировать расширение в Visual Studio 2012 и выше (в 2010 году этот шаг не требовался, поскольку VS2010 будет перестраивать кэш расширений при каждом запуске).
В настоящее время мы стремимся перейти к частичной установке VSIX, но есть определенные проблемы:
У нас есть определенная структура папок (дополнительные инструменты в комплекте). Я не смог найти вариант для включения произвольных папок и файлов в пакет VSIX. Это возможно?
Мы пытаемся избежать использованияdevenv.exe /setup
, так как в редких случаях это может привести к тому, что расширения не будут загружаться (как описано Remco Mulder наФорумы MSDN).
Нам по-прежнему необходимо выполнять операции «после установки», которые в настоящее время невозможны в VSIX.
Из-за предыдущих «грехов», мы жестко закодировали некоторые пути использованияCompanyName\ProductName\Version
форматировать пакеты VSIXиспользовал к следуйте, но похоже, что VSIX randomy теперь генерирует имя папки (как упоминает Джейсон в своем ответе ниже).
Поэтому мне бы очень хотелось иметь возможность установить «распакованный» пакет VSIX - пусть установщик MSI создаст файловую структуру на диске (в правильном месте,%VSInstallDir%\Common7\IDE\Extensions\Company\Product\Version
), а затем каким-то образом VSIX потреблять.vsixmanifest
файл для регистрации расширения в Visual Studio.
(Первоначальное копание в Extension Manager API показывает, что есть метод, называемыйCreateInstalledExtension
вExtensionManagerService
который берет путь к vsixmanifest, в сборкеMicrosoft.VisualStudio.ExtensionManager.Implementation.dll
, но к сожалению это внутреннее).
Таким образом, не прибегая к хакерским API, есть ли альтернативный способ по существу установить расширение в Visual Studio (2012 и выше), не используяdevenv /setup
?