Развернуть сборку, содержащую IWizard для шаблона проекта с VSIX - PullRequest
13 голосов
/ 23 февраля 2011

Я создал расширение для VS 2010, которое развертывает шаблон проекта.Шаблон проекта использует пользовательский мастер (в конкретной сборке), который вызывается при создании нового проекта на основе этого шаблона.

Я хочу упаковать сборку, содержащую мастер, в VSIX, чтобы он получалразвернутый где-то, где шаблон может найти его (я знаю, что GAC не подходит для VSIX).

В основном, если я разверну сборку в GAC, установлю VSIX, а затем создаю проект, мастер успешно запускается.Если я сделаю то же самое, не развернув сначала сборку, шаблоны проекта не найдут сборку при создании проекта.

Мой вопрос: как развернуть шаблон проекта и сборку, в которой он нуждается, с помощью пакета VSIX?

Спасибо за вашу помощь

РЕДАКТИРОВАТЬ: я изменил подпуть VSIX ссылки сборки мастера на «ProjectTemplates» в проекте установки и соответственно обновил ссылку сборки содержимого vsixmanifest.Кажется, сейчас работает.

Ответы [ 3 ]

16 голосов
/ 24 февраля 2011

Вам не нужно получать свою сборку, содержащую реализацию IWizard в GAC. Вы можете просто объявить его в файле extension.vsixmanifest как Элемент сборки в разделе Содержимое.

К сожалению, это нигде не документировано.

Единственная сложная задача - убедиться, что атрибут AssemblyName имеет правильное значение.

4 голосов
/ 02 ноября 2011

Мне не повезло с техникой элементов Assembly, чтобы работать, поэтому, если кто-то столкнется с той же проблемой, вот другое решение.

Visual Studio ищет DLL-библиотеки мастера, используя раздел реестра BindingPaths.Если вы добавите папку, содержащую вашу DLL, в подраздел BindingPaths, Visual Studio найдет вашу DLL.

Чтобы сделать это из VSIX, создайте файл .pkgdef в вашем проекте VSIX.Установите для его свойства Include in VSIX значение True и вставьте в него следующий текст:

[$RootKey$\BindingPaths\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}]
"$PackageFolder$"=""

(где X представляют GUID пакета, хотя я подозреваю, что любой GUID подойдет).

2 голосов
/ 17 июля 2012

Это работает для меня:

[$RootKey$\BindingPaths\{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}]
"$PackageFolder$"=""

Но элемент сборки не работает.

...