Как добавить ссылки на одно и то же решение проекта при экспорте шаблонов в Visual Studio?

У меня есть решение, которое содержит несколько проектов, давайте назовем их ProjectA и ProjectB. Мне нужно, чтобы ProjectA имел ссылку на ProjectB, однако, когда я "Экспорт шаблона", я не могу сохранить ссылку. То, что я пытаюсь сделать, это заставить его создать ссылку для меня, когда я создаю новый проект, а затем автоматически назвать его в соответствии с тем, что я ввел.

1 ответ

Это немного выходит за рамки чистых шаблонов Visual Studio.

Шаблоны Visual Studio поддерживают параметры замены шаблонов, поэтому вы можете сделать следующее:

  • Внутри вашего ProjectA.zip файл шаблона вы найдете ProjectA.csproj, который является шаблоном для проекта
  • В ProjectA.csproj вы найдете <ItemGroup> содержащий <Reference> записи
  • Среди них должна быть такая запись <Reference Include="ProjectB">

Когда вы создаете проект из вашего ProjectB-шаблона, его имя будет указываться пользователем, поэтому вы хотите заменить ProjectB с параметром замены, как $Foo$,

Вот где он выходит за рамки чистых шаблонов: как сказать Visual Studio заменить $Foo$? И какой будет замена?

Ваш единственный выбор здесь - использовать пользовательский мастер, который либо ищет проект типа ProjectB, либо запрашивает его у пользователя.

Вот схема того, как получить шаблон и пользовательский мастер, чтобы обойтись:

  • Создайте проект пакета VSIX.
  • Обязательно добавьте [ProvideBindingPath] приписать к вашей упаковке. Это необходимо для регистрации пользовательского мастера (в противном случае вам нужно будет установить его в GAC, чтобы VS мог его найти)
  • Создайте свой мастер, он должен реализовать Microsoft.VisualStudio.TemplateWizard.IWizard
  • Добавьте ваш шаблон в решение и добавьте его в качестве ресурса ProjectTemplate в vsixmanifest вашего пакета

В файле.vstemplate вашего шаблона добавьте следующий фрагмент ниже <TemplateContent> блок:

<WizardExtension>
  <Assembly>Your.Packages.Assembly</Assembly>
  <FullClassName>Your.Wizard</FullClassName>
</WizardExtension>

Это поднимет ваш мастер, когда проект будет создан. Вы могли бы, в RunStarted метод вызвать диалог, который запрашивает ссылку, или вы могли бы использовать automationObject параметр (который на самом деле является EnvDTE.DTE экземпляр), чтобы попытаться найти проект ProjectB и указать его имя в replacementsDictionary,

Другие вопросы по тегам