Создание шаблона проекта visual studio

Обновлено: 04.07.2024

Вы можете создать шаблон проекта вручную или использовать мастер Visual Studio Export Template Wizard. Он просто собирает вместе нужные XML-файлы и сворачивает ваш проект в архив формата ZIP. Для создания шаблона проекта вы делаете следующее:

1. Создаете проект в Visual Studio (или начинаете с существующего проекта).

2. Определяете, где в вашем шаблоне должны присутствовать параметры (если они нужны).

3. Выбираете опцию Export Template из меню File.

4. Не обязательно: редактируете XML-файл с расширением vstemplate.

Теперь давайте рассмотрим каждый из этих шагов.

Шаг 1. Создание вашего проекта

Большая часть создаваемых вами шаблонов будет начинаться с существующего шаблона Visual Studio (или пустого проекта). Обычно разработчики обращаются к шаблонам для реа­лизации стандартов и практик, и также при создании правил для команд разработчиков. По­этому самой сложной частью создания шаблона проекта является определение самого шаб­лона в смысле того контента, который должен в него войти. Например, предположим, что ваша команда разработчиков использует определенный набор библиотек, ресурсов или эле­ментов управления. Вы можете определить шаблон проекта, в котором все эти ресурсы бу­дут встроены (или на них будут указывать ссылки).

Шаг 2. Определение параметров проекта

Параметры проекта определяют элементы, которые настраиваются по умолчанию в тот момент, когда Visual Studio создает новый проект на основе данного шаблона. Напри­мер, когда вы создаете новый проект, то пространство имен файлов кода настраивается на пространство имен проекта. Это — параметр проекта. Visual Studio использует для этой цели несколько зарезервированных параметров шаблона. В табл. 7.3 дан обзор этих па­раметров.

Создание шаблона проекта

Мастер Export Template Wizard помогает вам работать с этими параметрами. После того как вы вручную задали их в вашем коде, мастер Export Template Wizard определит эти настройки.

Предположим, что у вас есть шаблон проекта с названием SmartClient. Когда пользова­тель выбирает этот шаблон для создания проекта, то вы хотите, чтобы этот шаблон вел себя как другой шаблон в диалоговом окне. Например, вы хотите, чтобы пространство имен проекта было определено с таким же именем, которое пользователь выбрал в каче­стве названия проекта.

Для реализации параметров шаблона вы определяете положение параметра в коде. В приме­ре с пространством имен вы должны использовать зарезервированный параметр шаблона safeprojectname на месте реального названия пространства имен, определенного в кодовых файлах проекта. Это указывает Visual Studio, что при создании нового проекта название пространства имен должно быть настроено на безопасное название проекта (определенное пользователем). Следующий пример показывает, как определить код:

Создание шаблона проекта

При наличии этих параметров ваш код собираться не будет. Поэтому лучше всего от­ладить ваш код перед настройкой параметров.

Теперь, когда вы задали ваши параметры, мастер Export Template Wizard определит их и поместит в XML-файл с расширением vstemplate. Мы рассмотрим это в шаге 3.

Пакет SDK для Visual Studio включает шаблоны проектов, которые создают пользовательский шаблон проекта и пользовательский шаблон элемента. Эти шаблоны включают некоторые общие подстановки параметров и создаются в виде ZIP-файлов. Они не развертываются автоматически и недоступны в экспериментальном экземпляре. Необходимо скопировать созданный ZIP-файл в каталог пользовательских шаблонов.

Шаблоны для создания шаблонов позволяют включать шаблоны в более крупные расширения. Это позволяет реализовать управление версиями в исходных файлах и создать группу проектов шаблонов в одном пакете VSIX.

Кроме того, можно настроить шаблон для установки пакетов NuGet. Дополнительные сведения см. в статье Пакеты NuGet в шаблонах Visual Studio.

Для основных сценариев создания шаблонов следует использовать мастер экспорта шаблонов, который сохраняет выходные данные в сжатом файле. Дополнительные сведения о создании базовых шаблонов см. в статье Создание шаблонов проектов и элементов.

Начиная с Visual Studio 2017 проверка наличия пользовательских шаблонов проектов и элементов больше не будет выполняться. Вместо этого расширение должно предоставлять файлы манифеста шаблона, в которых указано расположение установки этих шаблонов. Для обновления расширений VSIX можно использовать Visual Studio 2017. При развертывании расширения с помощью MSI необходимо создать файлы манифеста шаблона вручную. Дополнительные сведения см. в статье Обновление пользовательских шаблонов проектов и элементов для Visual Studio 2017. Схема манифеста шаблона описана в Справочнике по схемам манифестов шаблонов Visual Studio.

Создание шаблона проекта

Шаблон создает файл класса, значок, файл .vstemplate, редактируемый файл проекта с именем ProjectTemplate.vbproj или ProjectTemplate.csproj, а также некоторые файлы, которые обычно создаются в других типах проектов, такие как файл resources.resx, файл AssemblyInfo и файл .settings. Каждый файл кода содержит общие подстановки параметров, если это необходимо.

Выбор проекта Project Template

Добавьте и удалите элементы в проекте в соответствии с требованиями проекта. Не удаляйте редактируемый файл проекта, файл AssemblyInfo и файл .vstemplate.

Обновите файл .vstemplate, чтобы в нем была отражена информация о добавленных и удаленных элементах проекта. Элемент Project должен содержать элемент ProjectItem для каждого файла, который будет включен в шаблон.

Измените файлы кода и другое содержимое, доступное для пользователя, и добавьте соответствующие подстановки параметров.

Измените созданное содержимое в соответствии со своими потребностями.

Выполните построение проекта.

Visual Studio создает файл ZIP, содержащий шаблон. Он не развертывается и недоступен в экспериментальном экземпляре.

Создание шаблона элемента

Создайте проект Item Template.

Шаблон создает файл класса, значок, файл .vstemplate и файл AssemblyInfo. Файл класса содержит некоторые общие подстановки параметров.

Добавьте и удалите элементы в проекте в соответствии с требованиями проекта.

Обновите файл .vstemplate, чтобы в нем была отражена информация о добавленных и удаленных элементах проекта. Элемент Project должен содержать элемент ProjectItem для каждого файла, который будет включен в шаблон.

Измените файлы кода и другое содержимое, доступное для пользователя, и добавьте соответствующие подстановки параметров.

Измените созданное содержимое в соответствии со своими потребностями.

Выполните построение проекта.

Visual Studio создает сжатый файл, содержащий шаблон. Он не развертывается и недоступен в экспериментальном экземпляре.

Развертывание

Развертывание шаблона проекта или элемента

Создайте проект VSIX. Дополнительные сведения см. в разделе Шаблон проекта VSIX.

Задайте проект VSIX в качестве запускаемого проекта. В Обозревателе решений выберите узел проекта VSIX, щелкните его правой кнопкой мыши и выберите пункт Назначить запускаемым проектом.

Задайте проект для шаблона проекта (Project Template) в качестве ресурса для проекта VSIX. Откройте файл .vsixmanifest. Перейдите на вкладку Ресурсы и выберите Создать.

В поле Тип задайте значение Microsoft.VisualStudio.ProjectTemplate или Microsoft.VisualStudio.ItemTemplate.

В поле "Источник" выберите Проект в текущем решении, а затем проект, содержащий шаблон.

Нажмите клавишу F5, чтобы собрать решение. Откроется экспериментальный экземпляр.

Поговорим о том, как сделать шаблон самостоятельно.

Шаг первый. Создаем проект

Создаем новый проект: File -> New -> Project и выбираем там Windows Forms Application. Называем проект "MyWindowsFormsTemplate".


Шаг второй. Модификация проекта

Модифицируем проект как нам нужно. Я, например, добавил кнопку с текстом "Hello, World!" на форму.


Шаг 3. Сохраняем проект в виде шаблона

Для того, чтобы сохранять проект в виде шаблона, идем File -> Export Template.

На первой форме выбираем какой тип шаблона нам необходим: шаблон проекта (project) или шаблон файла (item) и в списке выбираем какой проект станет шаблонным.


Шаг 4. Настройки шаблона

Выбираем файл иконки, описание, название шаблона.

Я оставил иконку по умолчанию, название изменил на "My Windows Forms Template", а описание на "My Windows Forms Template Description".


Нажимаем кнопку Finish.

После того, как мы нажмем кнопку Finish файл шаблона в формате zip появится в папках

Documents and Settings\ \Мои документы\Visual Studio 2008\My Exported Templates\

Documents and Settings\ \Мои документы\Visual Studio 2008\Templates\ProjectTemplates\

Как студия знает, в какую вкладку вставлять шаблон? Очень просто. В zip файле создается XML файл MyTemplate.vstemplate с указанием всех настроек шаблона:



My Windows Forms Template
My Windows Forms Template Description

Шаблон проекта VSIX также может понадобиться, чтобы продвигать в организации стандарты разработки ПО, продемонстрировать новый продукт или обеспечить быстрый переход на новую технологию. Какова бы ни была причина, появление возможности создавать эти шаблоны станет хорошим пополнением вашего арсенала разработки и, безусловно, принесет пользу.

Подготовка

Создание начального приложения

Подготовив среду, можно приступить к написанию базового приложения, которое будет создаваться при каждом запуске этого шаблона проекта из New Project Wizard в Visual Studio. Это позволяет настроить все именно так, как нужно вам, чтобы сократить потери времени на выполнение повторяющихся задач, связанных с инициализацией проекта. Решение на этот момент может быть настолько простым или сложным, насколько вам требуется.

*


Рис. 1. Обновление разметки в Global.asax

Шаблон проекта VSIX также может понадобиться, чтобы продвигать в организации стандарты разработки ПО, продемонстрировать новый продукт или обеспечить быстрый переход на новую технологию.

Рис. 2. Файл Global.fs

Кроме того, потребуется добавить файл HomeController.fs, содержащий следующий код:

Создание шаблона проекта VSIX

Пример шаблона проекта, который мы разберем в этой статье, имеет несколько целей, и эти цели являются фундаментом, на котором базируется остальная часть моей статьи.

Visual Studio предоставляет богатую модель расширения, которая позволяет легко добиться первой цели. Самый простой способ — запустить Export Template Wizard из File | Export Template as VSIX. После этого Visual Studio выводит мастер создания пакета VSIX, где можно выбрать несколько проектов для сжатия в пакет VSIX. Хотя этот вариант помогает в простых случаях использования нескольких проектов, для более сложных ситуаций (цели 2–5) он не годится. Для таких вещей вам потребуется вариант с более широкими возможностями.

Рис. 3. Реализация интерфейса IWizard

Это дает отличную отправную точку, но теперь вы должны засучить рукава и вручную ввести несколько модификаций. Так как VSIX-файлы на самом деле являются файлами .zip с другим расширением, вы можете влезть в содержимое этого пакета, просто изменив расширение файла на .zip и распаковав его. Далее перейдите в каталог Solution в папке, появившейся в результате распаковки, и извлеките содержимое сжатого файла внутри него. После распаковки вы обнаружите проекты, которые образуют ваш шаблон проекта, и файл .vstemplate.

Чтобы реализовать предназначение этого шаблона проекта, вы должны модифицировать данный файл .vstemplate. Первым делом переименуйте его в MsdnFsMvc3.vstemplate. Поскольку этот файл .vstemplate является простым XML-файлом, вы можете теперь открыть его в любом текстовом редакторе и выполнить следующее.

    Убедитесь, что элементы<Name> и <Description> содержат информацию, которая должна отображаться для этого шаблона вVisual Studio New Project Wizard.

Измените значение в элементе <ProjectType> на FSharp.

Теперь вы можете сохранить и закрыть файл, а затем запаковать три папки и модифицированный файл .vstemplate в файл MsdnFsMvc3.zip.

*


Рис. 4. Заполнение метаданных

После этого файл MsdnFsMvc3.zip можно добавить в проект VSIX в Visual Studio. Для этого сначала перейдите в корневую папку проекта VSIX в Windows Explorer и создайте новую папку с именем ProjectTemplates. В ней вы должны добавить новую папку ASPNET. Создание этой второй папки определяет подтип проекта для шаблона. Скопируйте MsdnFsMvc3.zip в папку ASPNET.

В Visual Studio в режиме проектирования файлаsource.extension.vsixmanifest щелкните кнопку Add Content. На рис. 5 показаны элементы, которые вы можете задать.

*


Рис. 5. Добавление контента в режиме проектирования файла манифеста

Расширение шаблона проекта

Операции, выполненные на данный момент, позволили добиться первой цели этого шаблона и подготовить почву для реализации остальных целей. Эти дополнительные цели в основном достигаются добавлением кода в метод RunFinished реализации IWizard мастера шаблона.

Как вы помните, второй целью мы ставили динамическое добавление каждого из проектов шаблона в решение при создании нового проекта. Необходимый код показан на рис. 6.

Рис. 6. Динамическое добавление проектов в решение

Первая строка кода в методе, показанном на рис. 6, возвращает местонахождение многопроектного шаблона на компьютере, с которого был запущен New Project Wizard. Вторая — определяет функцию с именем AddProject. Эта функция содержит код, необходимый для обновления строки состояния Visual Studio, указывает файл .vstemplate, соответствующий нужному шаблону проекта, и добавляет проект из шаблона в решение. В последних строках кода вызывается функция AddProject для проектов MsdnWeb и MsdnWebApp. Аналогичный вызов AddProject можно было бы добавить и для проекта MsdnWebAppTests, если бы в том была нужда.

Visual Studio предоставляет богатую модель расширения.

Затем осуществляется связывание со значением projects, как показано ниже:

Теперь, когда у вас есть сопоставление проекта (project map), вы можете вызвать другую собственную функцию для запуска процесса добавления ссылок проекта. Первая строка следующего кода создает список tuple-объектов:

Каждый tuple-объект в списке представляет имя целевого проекта, за которым следует имя проекта, на который есть ссылка. Например, первый tuple указывает имя «MsdnWeb» (целевого проекта) со связанным именем «MsdnWebApp» (проекта, на который есть ссылка). Этот список затем передается по конвейеру в функцию BuildProjectReferences.

Процесс достижения последней цели — добавление UI, с помощью которого можно собирать информацию от пользователя в ходе создания проекта, — несильно изменился за последние несколько лет.

Ниже показана функция BuildProjectReferences:

Эта функция просто принимает список tuple-объектов, перебирает их, пытается получить из сопоставления проекта подходящий объект Project по имени и вызывает функцию AddProjectReference для выполнения реальной работы.

Функция AddProjectReference заканчивает процесс, проверяя, что и в аргументе target, и в аргументе projToReference содержатся допустимые проекты:

Если они содержат допустимые проекты, эта функция удаляет любую существующую ссылку, а затем добавляет ссылку в проект.

В примере есть несколько функций, используемых для выполнения установок пакетов NuGet. Самая важная из них показана ниже:

Теперь, когда вся эта функциональность реализована в вашем мастере шаблона, вы просто добавляете проект мастера шаблона как контент в проект VSIX с типом Template Wizard. На рис. 7 показано заполненное окно Add Content. Цели2–4 достигнуты.

*


Рис. 7. Заполненное окно Add Content

Добавление Windows Presentation Foundation UI

Процесс достижения последней цели — добавление UI, с помощью которого можно собирать информацию от пользователя в ходе создания проекта, — несильно изменился за последние несколько лет. В статье Рона Петруши (Ron Petrusha) за 2007 г. (oreil.ly/build-vs-proj-wiz) дан отличный обзор на эту тему. Хотя суть этого процесса остается прежней, вам нужно знать несколько вещей, чтобы реализовать эту функциональность в Windows Presentation Foundation (WPF) и связать ее с вашим шаблоном проекта.

После создания нужного UI вы должны подписать сборку. Затем добавить проект — как контент типа Template Wizard — в проект VSIX. В проекте мастера шаблона вы добавляете ссылку на проект, содержащий ваш UI. Закончив, введите код в метод RunStarted реализации IWizard, которая будет отображать этот UI и получать результат:

Наконец, в метод RunFinished мастера шаблона можно добавить следующий код:

Заключение

Читайте также: