Шаблоны для нескольких проектов / решений для Visual Studio 2012 с установщиком VSIX и пакетами Nuget
Я хотел бы иметь многопроектный шаблон, который будет создавать подпроекты, и будет устанавливать зависимости nuget, а также установщик vsix, который установит этот шаблон.
Проблемы с методами уже пробовали
Многопроектный шаблон без VSIX, без Nuget
Мне удалось создать шаблон для нескольких проектов, и он работал нормально, за исключением того, что когда он приходил, когда включались ссылки на нуги, он не работал. Не было простой / элегантной поддержки nuget, в которой не было VSIX.
Многопроектный шаблон с VSIX, без корневого шаблона
Поэтому я попытался использовать VSIX, и это показалось очень простым. Добавьте шаблон проекта в виде zip или из решения, соберите установщик vsix. Но когда я добавил второй шаблон проекта, чтобы создать многопроектный шаблон, собрал его, установил шаблон и попытался создать проект, я понял, что он не поддерживает настройку проекта master-sub, где мастер-проект создает подпроекты. Это было большой проблемой, потому что разработчики должны были создавать каждый проект в порядке зависимости.
1 ответ
Наконец-то у меня работает настройка. Мне потребовалось много дней, чтобы поэкспериментировать и соединить разные статьи и блоги MSDN, чтобы понять это.
Объединение Multi проекта шаблона (с корневым шаблоном) и VSIX
Конечный результат
- Проект Visual Studio 2012 VSIX, в котором находится папка пакетов со всеми зависимостями nuget.
- Zip-файл с шаблоном root/master, который связывает несколько проектов, которые также находятся в zip-файле в соответствующих папках.
- Встроенный установщик vsix, который установит один шаблон проекта с подпроектами.
- Это позволит вам поддерживать шаблон из проекта, который продолжает расти без особых усилий, используя функцию File-Export Template.
- Использует автоматически сгенерированные и настраиваемые параметры для переименования пространств имен и файлов вашего шаблона в соответствии с вашим новым именем проекта.
При создании проекта с этим шаблоном он автоматически создает несколько подпроектов, но эти подпроекты не доступны (но могут быть) в качестве шаблонов в меню нового проекта. Это замечательно, если вы пытаетесь создать шаблон, похожий на корпоративный дизайн, который зависит от совместной работы многих проектов, но вы не хотите, чтобы пользователь мог создавать эти подпроекты, или вы хотите, чтобы они были доступны в другом область шаблона проекта / категория.
шаги:
- Создать папку "MyTemplate"
- Создайте файл root.vstemplate
Добавьте следующее в файл:
<WizardExtension> <Assembly>NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Assembly> <FullClassName>NuGet.VisualStudio.TemplateWizard</FullClassName> </WizardExtension> <WizardData> <packages repository="extension" repositoryId="fill this in"> <package id="Newtonsoft.Json" version="5.0.6" /> </packages> </WizardData>
Откройте свой первый проект, который вы хотите использовать в качестве шаблона "под-проекта", экспортируйте шаблон из File->Export Template.
- Извлеките содержимое zip в папку MyTemplate, чтобы в итоге вы получили MyTemplate/Project1
- Откройте Project1.vstemplate из того, что вы только что извлекли.
и вставьте нижеприведенный ниже блок TemplateContent (например, если вы хотите добавить пакет Jget nuget)
<WizardExtension> <Assembly>NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</Assembly> <FullClassName>NuGet.VisualStudio.TemplateWizard</FullClassName> </WizardExtension> <WizardData> <packages repository="extension" repositoryId="fill this in"> <package id="Newtonsoft.Json" version="5.0.6" /> </packages> </WizardData>
Заархивируйте всю корневую папку MyTemplate, чтобы получить файл MyTemplate.zip, в котором находится содержимое папки MyTemplate.
- Создайте проект VSIX (вам понадобится SDK для Visual Studio 2012, чтобы иметь этот шаблон) из категории шаблонов расширяемости в C#.
- Создать папку с пакетами
- Добавьте пакет nuget (только файл.nupkg), на который вы ссылались в своих подпроектах, vstemplate, в папку пакетов и в свойствах файлов, установите для его действия по сборке содержимое, а для параметра Включить в VSIX - значение true. В моем случае я добавил Newtonsoft.Json.5.0.6.nupkg.
- В source.extension.vsixmanifest установите имя автора
- На вкладке "Активы" нажмите "Создать" и выберите шаблон проекта в раскрывающемся списке, затем файл в файловой системе в следующем раскрывающемся списке.
- Найдите и выберите почтовый индекс, который вы создали, нажмите Ok. Это создаст папку ProjectTemplates с почтовым индексом.
- Скопируйте идентификатор продукта из верхней части source.extension.vsixmanifest.
- Откройте zip с помощью программы, подобной WinRar, которая позволяет сохранять изменения непосредственно в zip-архиве (стандартное приложение windows zip не позволяет этого).
- Вставьте идентификатор продукта в раздел repositoryid.
- Сохраните изменения в zip-файле (убедитесь, что вы вернулись в WinRar, если это то, что вы используете, так как он обнаружит изменения и спросит вас, хотите ли вы обновить)
- Постройте решение и перейдите в папку bin / debug, чтобы запустить установщик vsix.
- Создай свой проект
Необязательный шаг, чтобы ваш главный проект переименовал ваши файлы и пространства имен
- Откройте каждый файл vstemplate подпроекта и добавьте $safeprojectname$ в элемент DefaultName. например
<DefaultName>$safeprojectname$.Domain</DefaultName>