Как добавить ссылки на одно и то же решение проекта при экспорте шаблонов в 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
,