Использование IWizard в шаблоне элемента без установки сборки в GAC?

Я хотел бы создать шаблон настраиваемого элемента, который включает в себя мастер (интерфейс IWizard).

В http://msdn.microsoft.com/en-us/library/vstudio/ms171411%28v=vs.100%29.aspx и в некоторых других местах всегда описывается, что сборка, содержащая мастер, должна быть установлена ​​в GAC. Я хотел бы распространять свой шаблон в своей организации, и не каждый имеет право устанавливать что-либо в GAC.

Итак, мне интересно, не существует ли способа сборки сборки с кодом мастера внутри шаблона zip или файла vsix?

Мне кажется, что это должна быть общая проблема?

Любая помощь в распространении настраиваемого шаблона мастера и элемента без каких-либо установок GAC?

Ответы

Ответ 1

После многих исследований я нашел способ сделать это. С помощью этого метода можно включить сборку с реализацией IWizard в файл VSIX, даже не подписывая ее, и иметь ее доступную во время выполнения. Не нужно возиться с GAC.

Вам нужно 3 проекта в вашем решении

  • проект vsix (мы называем его MyExtension)
  • проект шаблона элемента (мы называем его MyTemplate)
  • обычный проект библиотеки классов для кода мастера (мы называем его MyWizardImpl)

Внутри MyWizardImpl вам необходимо реализовать интерфейс IWizard в классе арбитража. (мы называем это MyWizardImpl.ItemTemplateWizard1). При компиляции это вы получаете как вывод

<solutiondir>\MyWizardImpl\bin\Debug\MyWizardImpl.dll

Теперь, в MyTemplate\MyTemplate.vstemplate, вам нужно ссылаться на него

<WizardExtension>
    <Assembly>MyWizardImpl</Assembly>
    <FullClassName>MyWizardImpl.ItemTemplateWizard1</FullClassName>
</WizardExtension>

Последняя сложная часть: включение сборки внутри vsix таким образом, что ее можно загрузить, когда применяется ItemTemplate.

  • Создать папку MyExtension\Assemblies
  • В проводнике решений щелкните правой кнопкой мыши эту папку и выберите Добавить → Существующий элемент...
  • В диалоговом окне "Добавить существующий элемент" перейдите к созданному MyWizardImpl.dll. На кнопке "Добавить" щелкните маленькую стрелку и выберите "Добавить как ссылку" (чтобы избежать того, что VS создает копию dll).
  • В свойствах этой ссылки выберите BuildAction = Content, IncludeInVSIX = True
  • Откройте vsixmanifest в редакторе XML (или в блокноте) и добавьте строку сборки в раздел

Пример:

<Content>
   <Assembly AssemblyName="MyWizardImpl">Assemblies\MyWizardImpl.dll</Assembly>
</Content>

Создайте и протестируйте решение, код мастера должен запускаться при использовании шаблона.

Если вам нужно несколько шаблонов в вашем vsix, вам просто нужно добавить дополнительные проекты ItemTemplate. Все мастера могут войти в ту же сборку MyWizardImpl.