Шаблоны нескольких проектов/решений для Visual Studio 2012 с установщиком VSIX и пакетами Nuget

Я хотел бы иметь многопроектный шаблон, который будет создавать вспомогательные проекты, и будет устанавливать зависимости nuget, а также установить установщик vsix, который установит этот шаблон.

Проблемы с уже опробованными методами

Шаблон для нескольких проектов без VSIX, no nuget

Мне удалось создать многопроектный шаблон, и он отлично работал, за исключением случаев, когда пришло время включить ссылки на nuget, но это не сработало. Не было легкой/элегантной поддержки nuget, которая не включала VSIX.

Многопроектный шаблон с VSIX без шаблона корня

Поэтому я пробовал использовать VSIX, и это казалось очень простым. Добавьте проект шаблона в виде zip или из решения, создайте установщик vsix. Но когда я добавил второй шаблон проекта, чтобы создать многопроектный шаблон, построил его, установил шаблон и попытался создать проект, я понял, что он не поддерживает настройку главного субпроекта, где главный проект создает подпроекты. Это была большая проблема, потому что разработчикам приходилось создавать каждый проект в порядке зависимости.

Ответы

Ответ 1

У меня наконец работает настройка. Мне потребовалось много дней, чтобы экспериментировать и исправлять разные статьи и блоги MSDN, чтобы понять это.

Объединение шаблона Multi проекта (с корневым шаблоном) и VSIX

Конечный результат

  • Проект VSIX Visual Studio 2012, в котором содержится папка пакетов, которая имеет все зависимости nuget.
  • Zip файл с шаблоном root/master, который связывает множество проектов, которые также находятся в zip файле в их соответствующие папки.
  • Встроенный установщик vsix, который установит один шаблон проекта который имеет подпроекты.
  • Это позволит вам сохранить шаблон из проекта, который продолжает расти с минимальными усилиями, используя File-Export Шаблонная функция.
  • Использует автоматически сгенерированные и настраиваемые параметры для переименования ваших шаблонные пространства имен и файлы в соответствии с вашим новым именем проекта.

При создании проекта с помощью этого шаблона он автоматически создает несколько подпроектов, однако подпроекты не доступны (но могут быть) доступны в качестве шаблонов в новом меню проекта. Это здорово, если вы пытаетесь создать шаблон, похожий на дизайн предприятия, который зависит от многих проектов, работающих вместе, но вы не хотите, чтобы пользователь мог создавать эти подпроекты или вы хотите, чтобы они были доступны в другом шаблоне проекта область/категория.

Шаги:

  • Создайте папку "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>
    
  • Откройте первый проект, который вы хотите использовать в качестве шаблона подпроекта, экспортируйте шаблон из файла → Экспорт шаблона.

  • Извлеките содержимое zip в папку MyTemplate, так что вы получите MyTemplate/Project1
  • Откройте файл Project1.vstemplate из того, что вы только что извлекли.
  • и вставьте следующий ниже блок TemplateContent (например, если вы хотите добавить пакет Json 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 (вам понадобится Visual Studio 2012 SDK для создания этого шаблона) из категории шаблонов расширяемости под С#.
  • Создать папку с папками
  • Добавьте пакет nuget (только файл .nupkg), который вы указали в своих подпроектах vstemplate в папку пакетов и в свойствах файлов, установите его действие сборки для контента и включите в VSIX значение true. В моем случае я добавил Newtonsoft.Json.5.0.6.nupkg.
  • В source.extension.vsixmanifest укажите имя автора
  • На вкладке "Активы" нажмите "Создать" и выберите шаблон проекта из раскрывающегося списка, а затем файл в файловой системе в следующем раскрывающемся списке.
  • Найдите и выберите созданный zip, нажмите Ok. Это создаст папку ProjectTemplates с zip.
  • Скопируйте идентификатор продукта из верхней части source.extension.vsixmanifest.
  • Откройте zip с помощью программы, такой как WinRar, которая позволяет сохранять изменения непосредственно в zip (по умолчанию это приложение zip для Windows не позволяет).
  • Вставить идентификатор продукта в раздел репозитория.
  • Сохраните изменения в zip файле (убедитесь, что вы вернетесь в WinRar, если это то, что вы используете, так как оно обнаружит изменения и спросит вас, хотите ли вы обновить).
  • Создайте решение и перейдите в папку bin/debug, чтобы запустить установщик vsix
  • Создайте свой проект

Дополнительный шаг, чтобы ваш мастер-проект переименовал ваши файлы и пространства имен

  • Откройте каждый файл vstemplate для каждого проекта и добавьте $safeprojectname $в элемент DefaultName. например
<DefaultName>$safeprojectname$.Domain</DefaultName>