Развертывание сборки, содержащей IWizard для шаблона проекта с VSIX
Я создал расширение для VS 2010, которое развертывает шаблон проекта. Шаблон проекта использует специальный мастер (в конкретной сборке), который вызывается при создании нового проекта на основе этого шаблона.
Я хочу упаковать сборку, содержащую мастер в VSIX, чтобы он был развернут где-то, где шаблон может его найти (я знаю, что GAC не является вариантом с VSIX).
В принципе, если я развожу сборку в GAC, установите VSIX, а затем создайте проект, который мастер успешно вызвал.
Если я сделаю то же самое без развертывания сборки сначала, шаблоны проекта не найдут сборку при создании проекта.
Мой вопрос: как развернуть шаблон проекта и его сборку, используя пакет VSIX?
Спасибо за помощь
EDIT: я изменил Sub Path VSIX ссылки на сборку мастера на "ProjectTemplates" в проекте установщика и соответствующим образом обновил ссылку на сборку содержимого vsixmanifest. Теперь он работает.
Ответы
Ответ 1
Вам не нужно, чтобы ваша сборка содержала реализацию IWizard в GAC. Вы можете просто объявить его в файле extension.vsixmanifest как элемент сборки в разделе "Содержимое".
К сожалению, это нигде не документировано.
Единственная сложная часть - убедиться, что атрибут AssemblyName имеет правильное значение.
Ответ 2
Мне не повезло с тем, что техника элемента Assembly работает, поэтому, если кто-то другой столкнулся с одной и той же проблемой, вот еще одно решение.
Visual Studio ищет библиотеки мастеров с помощью раздела реестра BindingPaths. Если вы добавите папку, содержащую вашу DLL, в подраздел BindingPaths, то Visual Studio найдет вашу DLL.
Чтобы сделать это из VSIX, создайте файл .pkgdef в проекте VSIX. Установите для параметра Свойство Include в VSIX значение True и вставьте в него следующий текст:
[$RootKey$\BindingPaths\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}]
"$PackageFolder$"=""
(где Xs представляют GUID пакета, хотя я подозреваю, что любой GUID будет делать).
Ответ 3
Это работает для меня:
[$RootKey$\BindingPaths\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}]
"$PackageFolder$"=""
Но элемент сборки не работает.