Развертывание сборки, содержащей IWizard, для шаблона проекта с помощью VSIX

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

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

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

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

Спасибо за помощь

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


person Johann Blais    schedule 23.02.2011    source источник
comment
Я нашел еще один полезный ответ [здесь][1] [1]: stackoverflow.com/questions/16244185/   -  person Santhosh Ramini    schedule 19.09.2013


Ответы (3)


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

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

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

person Aaron Marten    schedule 24.02.2011
comment
Спасибо, я обновил тег содержимого в соответствии с предоставленной вами страницей. Графический интерфейс для vsixmanifest сгенерировал странную ссылку, что-то вроде |AssemblyName|. Но шаблон проекта по-прежнему не находит сборки. Как мне сказать ему, где найти сборку? - person Johann Blais; 24.02.2011
comment
Не могли бы вы обновить свой вопрос, указав более подробную информацию? Какие именно файлы вы изменили и как? Спасибо. - person l33t; 23.04.2012
comment
@I33t Может быть, взгляните на stackoverflow.com/questions/16244185/ - person Achim; 03.06.2013

Мне не повезло с техникой сборки элементов, поэтому, если кто-то еще столкнется с той же проблемой, вот еще одно решение.

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).

person itowlson    schedule 02.11.2011
comment
@itowlson, как создать файл .pkgdef? вы использовали какой-либо инструмент? потому что при добавлении нового элемента я не получаю опцию для файла .pkgdef - person Neo; 03.04.2015
comment
Я создал простой файл .pkgdef, добавленный с учетом [$RootKey, но он не работает должным образом - person Neo; 03.04.2015

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

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

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

person user1531727    schedule 17.07.2012
comment
мне не удалось создать файл .pkgdef, есть ли какая-либо утилита, я напрямую создал файл с тем же расширением и добавил строку выше в него, как есть, но мне не удалось создать проект с использованием этого VSIX появляется такая же ошибка :( вы можете мне помочь - person Neo; 03.04.2015