0

Я занимаюсь созданием стартерки MVC для работы, и у меня возникают проблемы с созданием многопроектного шаблона, который не требует массовой модификации после создания.Visual Studio 2012 несколько шаблонов проектов с взаимозависимостями

Что у меня есть 4 проекта, которые имеют некоторую зависимость друг от друга:

  • StarterKit.Common - нет зависимостей
  • StarterKit.DAL - зависимостей для StarterKit.Common
  • StarterKit.BL - зависимость в StarterKit.Common и StarterKit.DAL StarterKit.Web - зависимость от других трех

Я пытался идти маршрут экспорта каждого PROJEC t с помощью мастера экспорта шаблонов, создающего файл .vstemplate с корневым файлом и все это застегнув. Хотя это работает (я могу создать новое решение на основе этого шаблона), у него есть серьезные проблемы.

Во-первых, экспорт заменяет все пространство имен каждого проекта с $ safeprojectname $, т.е. StarterKit.DAL => $ safeprojectname $, StarterKit.Web => $ safeprojectname $ и т.д.

Это означает, что, когда новый (назовем его XXX), что ранее было в пространстве имен StarterKit.Web теперь заканчивается в пространстве имен XXX и ранее было StarterKit.BL также заканчивается в пространстве имен XXX!

Это, очевидно, не сработает.

Во-вторых, некоторые операторы использования не заменяются вообще. Например, using StarterKit.Common; не заменен в веб-проекте, потому что у него нет правильного пространства имен (это StarterKit.Web).

В-третьих, у меня есть некоторые сценарии .tt, содержащие операторы, которые я хочу заменить, но даже если я установил ReplaceParameters="true" в проекте, они вообще не затрагиваются.

Я также изучил создание проекта VSIX, но, честно говоря, я не вижу, как я могу это использовать. Для меня это выглядит в основном как утилита zip, которая создает .vstemplate для вас и переименовывает .zip в .vsix для меня.

Что мне нужно сделать, это:

  • Пакет все проекты в одном файле развертывания, доступные в качестве шаблона «Новый проект» в VS
  • При создании новыйПроект, замените все «StarterKit» имена пространств имен в файлах .csproj, .cs, .cshtml и .tt с любым пользователем, выбранным в качестве имени решения.
  • Простейший процесс, при котором я могу легко обновлять шаблоны всякий раз, когда базовые проекты меняются (файлы добавляются/удаляются, переименован, изменен контент и т. д.)

Кто-нибудь есть идеи, если это возможно?

ответ

2

Полное раскрытие: Я создатель ниже указанного проекта.

Вы можете достичь желаемого результата с помощью реализованной мной IWizard, созданной под названием GlobalParams. Он предоставляет информацию с уровня шаблона решения доступным для дочерних шаблонов, которые также запускают мастер, префикс ВСЕ параметры уровня решения со словом global и добавление их к параметрам дочернего шаблона.

Если вы использовали GlobalParams с указанным шаблоном для нескольких проектов и пользователь ввел "StarterKit", следующее было бы верно:

  • StarterKit.Common удалось получить доступ к
    • $ safeprojectname $ = StarterKit.Common
    • $ globalsafeprojectname $ = StarterKit
    • $ globalguid1 $ = E8C8A064601844439909D6C33AB90CB3
    • $ globalguid2 $ = 020DB5ABF76040C7BDA19EAC54DFE3D8
    • $ globalguid3 $ = 8392FB760F754C0AB87778845CC28B6D
    • $ globalguid4 $ = 13E07D43F523467587296B2C386DEE50
  • StarterKit.DAL
    • $ safeprojectname $ = StarterKit.DAL
    • $ globalsafeprojectname $ = StarterKit
    • $ globalguid1 $ = E8C8A064601844439909D6C33AB90CB3
    • $ globalguid2 $ = 020DB5ABF76040C7BDA19EAC54DFE3D8
    • $ globalguid3 $ = 8392FB760F754C0AB87778845CC28B6D
    • $ globalguid4 $ = 13E07D43F523467587296B2C386DEE50
  • StarterKit.BL
    • $ safeprojectname $ = StarterKit.BL
    • $ globalsafeprojectname $ = StarterKit
    • $ globalguid1 $ = E8C8A064601844439909D6C33AB90CB3
    • $ globalguid2 $ = 020DB5ABF76040C7BDA19EAC54DFE3D8
    • $ globalguid3 $ = 8392FB760F754C0AB87778845CC28B6D
    • $ globalguid4 $ = 13E07D43F523467587296B2C386DEE50
  • StarterKit.Web
    • $ safeprojectname $ = StarterKit.Web
    • $ globalsafeprojectname $ = StarterKit
    • $ globalguid1 $ = E8C8A064601844439909D6C33AB90CB3
    • $ globalguid2 $ = 020DB5ABF76040C7BDA19EAC54DFE3D8
    • $ globalguid3 $ = 8392FB760F754C0AB87778845CC28B6D
    • $ globalguid4 $ = 13E07D43F523467587296B2C386DEE50

С GlobalParams Вы имеете доступ к 100 Guid с с глобальным префиксом, которые одинаковы для дочерних шаблонов. Так StarterKit.Common проект может быть дано значение «$ globalguid1 $» в качестве идентификатора проекта с StarterKit.DAL и StarterKit.BL ссылки проекта строительства на StarterKit.Common с помощью «$ globalsafeprojectname $. Common "в качестве имени ссылки на проект и" $ globalguid1 $ "в качестве идентификатора ссылки на проект. Я думаю, вы можете увидеть, как он будет работать для создания ссылок между остальными проектами.

+0

Очень хорошее решение. Хотя на этот раз я не буду использовать его (сценарий PS хорошо работает для наших целей), я буду отмечать его как ответ, поскольку это, вероятно, единственное реальное решение исходной проблемы. – peter3

0

Я так и не нашел ответа на этот вопрос, поэтому выбрал другой маршрут.

Я создал сценарий PowerShell, который я включаю в zip-файл с файлами решений. Сценарий переименовывает решение, проекты и классы в соответствии с именем проекта, выбранным пользователем.

облом в том, что это должен быть запущен вне Visual Studio

Смежные вопросы