June 2015

Volume 30 Number 6


ASP.NET

Создание собственных шаблонов для Visual Studio с помощью SideWaffle

Тайлер Хьюз

Продукты и технологии:

Visual Studio 2013 Community Edition, C#, SideWaffle

В статье рассматриваются:

  • создание проекта шаблона Visual Studio и добавление NuGet-пакета TemplateBuilder;
  • создание шаблона проекта и шаблонов элементов;
  • добавление фрагментов (snippets) в проект VSIX.

Исходный код можно скачать по ссылке

Благодаря выпуску нового Visual Studio Community Edition разработчики, ранее использовавшие Express Editions, теперь могут задействовать расширения, о которых они так много слышали. Если вы не в курсе, то расширения — это плагины, расширяющие функциональность Visual Studio. Доступны самые разнообразные расширения.

Мы всегда ищем способы более эффективного кодирования и примерно год назад наткнулись на расширение SideWaffle (sidewaffle.com). SideWaffle добавляет новые шаблоны проектов и элементов, созданные другими разработчиками для Visual Studio; они позволяют вам создавать собственные шаблоны и фрагменты кода (code snippets). В этой статье мы рассмотрим SideWaffle и покажем, как создавать собственные шаблоны и фрагменты.

Зачем использовать SideWaffle?

Как упоминалось, SideWaffle добавляет новые шаблоны проектов и элементов в Visual Studio. Вероятно, вас интересует, как они могут помочь вам. Допустим, вы внештатный веб-разработчик, создающий веб-сайты для клиентов. По-видимому, у вас есть какие-то специфические вещи, повторяемые для каждого сайта и, возможно, использующие стороннюю JavaScript-библиотеку вроде Knockout.js или формирующие особую структуру папок проекта. Независимо от того, как вы подготавливаете проект, SideWaffle может преобразовать его в повторно используемый шаблон. Кроме того, SideWaffle включает повторно используемый NuGet-пакет TemplateBuilder, который преобразует шаблоны в расширения.

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

Прежде чем создавать шаблон, нужно подготовить среду разработки. Первым делом вам, конечно, понадобится Visual Studio. Для этой статьи мы использовали Visual Studio 2013 Community Edition (bit.ly/1GUTLo3). Затем вы должны установить Visual Studio 2013 SDK (bit.ly/1NZVkD9). Наконец, скачайте и установите расширение SideWaffle с sidewaffle.com.

Закончив подготовку, начните с открытия Visual Studio и создания нового проекта. Создать пакет шаблона можно с помощью проектов двух типов. Первый — это проект VSPackage, который позволяет добавлять в Visual Studio средства вроде контекстных меню или пунктов меню. Второй — проект VSIX, который является просто контейнером для хранения файлов и ресурсов проекта и не предоставляет никакой дополнительной функциональности. Оба эти проекта вы найдете в диалоге New Project в узле Extensibility. Сегодня нам нужен базовый шаблон, поэтому проект VSIX вполне подойдет. Вы можете сохранить имя проекта по умолчанию.

После создания проекта автоматически открывается файл его манифеста. Поле Author является обязательным для заполнения, поэтому добавьте в него свое имя (или название компании). Поле Description будет показываться в диалоговом окне расширений Visual Studio, поэтому введите в него какой-то полезный текст. Сохраните файл и закройте его. Следующий шаг — добавление в проект NuGet-пакета TemplateBuilder, что можно сделать либо через диалог Manage NuGet Packages или с помощью Package Manager Console.

Давайте остановимся на минутку и заглянем за кулисы. Когда вы устанавливаете TemplateBuilder в проект, происходит следующее.

  1. Добавляется ссылка на TemplateBuilder.dll. Эта сборка содержит пользовательские мастера, которые можно применять в процессе создания шаблона, а также другие вспомогательные средства.
  2. Файл проекта модифицируется на импорт дополнительных целевых файлов MSBuild, что позволяет процессу сборки поддерживать добавление шаблонов в сгенерированный VSIX. Поскольку это реализуется с помощью MSBuild, вы можете собирать свое решение на серверах с непрерывной интеграцией (continuous integration servers) и из командной строки.
  3. Добавляется файл *.props в Properties\template-builder.props. Вы можете указать имя листа узла по умолчанию, который должен содержать ваши шаблоны. Кроме того, этот файл можно использовать для управления специфическими аспектами TemplateBuilder.
  4. Манифест VSIX manifest (обычно с именем source.extension.vsixmanifest) модифицируется, чтобы включить теги Asset для сгенерированных шаблонов.

Установив TemplateBuilder, можно приступать к созданию шаблонов. TemplateBuilder при сборке проекта VSIX автоматически запускается и начинает обрабатывать шаблоны.

Добавление TemplateBuilder в проект исчерпывает минимальные требования. Теперь вы можете добавить шаблон проекта в текущее открытое решение.

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

Мы будем использовать существующий проект Contoso ASP.NET Web Forms/MVC. В этом проекте применяются Bootstrap 3, jQuery и Modernizr, которые помогут ускорять разработку всякий раз, когда мы будем создавать новый проект на основе этого шаблона. Как правило, хорошей идеей является запуск любого проекта после его добавления в решение. Это просто мера предосторожности, чтобы убедиться, что проект работает ожидаемым образом, до создания шаблона. Поэтому запустите данный проект (Ctrl+F5) и проверьте, работает ли он.

В этом проекте применяются Bootstrap 3, jQuery и Modernizr, которые помогут ускорять разработку всякий раз, когда мы будем создавать новый проект на основе этого шаблона.

Чтобы создать шаблон проекта, нужно добавить:

  • проект в решение и отключить его сборку;
  • ссылку на шаблон (Template Reference) в проект VSIX;
  • файлы метаданных в исходный проект для информации о шаблоне.

Чтобы предотвратить сборку проекта шаблона в этом решении (этот проект по-прежнему можно компилировать и запускать в других решениях), щелкните раскрывающееся меню, чтобы указать конфигурацию сборки и выберите из списка Configuration Manager. На экране появится диалог Configuration Manager. Для запрета сборки проекта сбросьте флажок рядом с именем проекта в столбце Build. Сделав это для конфигурации Debug, повторите тот же процесс для конфигурации Release.

Бывают ситуации, когда нужно создать шаблон, содержащий несколько проектов. Если вы закончите работу над таким комплексным проектом и перейдете к этому шагу, учитывайте, что единственное, что надо указать для конфигураций Debug и Release, — либо проект VSIX, либо проект VSPackage в зависимости от вашего предыдущего выбора. На рис. 1 показано окно Configuration Manager после выключения проекта из процесса сборки.

Выключение конфигурации Debug из процесса сборки
Рис. 1. Выключение конфигурации Debug из процесса сборки

Затем вы должны подключить проект VSIX к основному проекту, для чего добавьте ссылку на шаблон (Template Reference). Щелкните правой кнопкой мыши проект VSIX и выберите Add | Add Template Reference (проект SideWaffle).

Появится диалог Project Selector. Из списка выберите проект, который вы хотите использовать в качестве шаблона, и щелкните OK. В ваш проект VSIX будут внесены некоторые изменения и будет предложено перезагрузить проект. Вы можете выбрать вариант Reload All, а затем дождаться, когда SideWaffle закончит свою работу.

Теперь добавим файлы метаданных шаблона в веб-проект. Щелкните правой кнопкой мыши основной проект и выберите Add | New Item из списка. В диалоге Add New Item перейдите в раздел Extensibility и укажите SideWaffle Project Template Files. Вы можете использовать имя по умолчанию, присвоенное Visual Studio. Выбрав шаблон элемента Project Template Files, щелкните Add.

Элемент Project Template Files добавляет два новых файла в основной проект. Первый из них — _preprocess.xml; он сообщает Visual Studio, куда помещать ваш шаблон при открытии диалога New Project. Ниже показано содержимое этого файла по умолчанию:

<?xml version="1.0" encoding="utf-8" ?>
<Preprocess>
  <TemplateInfo Path="CSharp\Web\SideWaffle"/>
  <Replacements Include="*.*" Exclude="*.vstemplate;
    *.png;*.png;*.ico;_preprocess.xml;_project.vstemplate.xml">
    <add key="ContosoWebFormsMvc" value="$safeprojectname$"/>
  </Replacements>
</Preprocess>

В этом файле вы найдете следующую информацию:

  • путь к узлу, где шаблон будет появляться в диалоге New Project;
  • сведения о заменах исходного содержимого.

Атрибут Path в элементе TemplateInfo указывает место появления шаблона в диалоге New Project.

В элементе Replacements можно объявить любые замены, которые должны применяться в процессе сборки шаблона. Вы получаете замену по умолчанию для имени проекта, которое в сгенерированном шаблоне будет заменено на $safeprojectname$. Это обычно приводит к обновлению объявлений пространств имен. При наличии $safeprojectname$, когда шаблон используется в Visual Studio, объявления пространств имен будут обновляться именем, указанным пользователем. Вы не ограничены одной заменой; можно добавлять столько замен, сколько нужно. Иногда может потребоваться модификация файлов исходного кода, чтобы выбор всегда был уникальным во избежание конфликтов замен.

Теперь перейдем ко второму файлу, добавленному в проект, — _project.vstemplate.xml. Он содержит метаданные о шаблоне. На рис. 2 приведено содержимое этого файла по умолчанию, где ContosoWebFormsMvc является именем проекта.

Рис. 2. Базовый файл _project.vstemplate.xml

<VSTemplate Version="3.0.0"
  xmlns="http://schemas.microsoft.com/developer/
    vstemplate/2005"
  Type="Project">
  <TemplateData>
    <Name>Your name here</Name>
    <Description>Project description here</Description>
    <DefaultName>ContosoWebFormsMvc</DefaultName>
 
    <ProjectType>CSharp</ProjectType>
    <ProjectSubType></ProjectSubType>
    <SortOrder>1000</SortOrder>
    <CreateNewFolder>true</CreateNewFolder> 
    <ProvideDefaultName>true</ProvideDefaultName>
    <LocationField>Enabled</LocationField>
    <EnableLocationBrowseButton>true
    </EnableLocationBrowseButton>
    <Icon>sw-file-icon.png</Icon>
 
    <!-- Указывает, сколько раз должен появляться
         этот элемент родительских папках -->
    <NumberOfParentCategoriesToRollUp>1
    </NumberOfParentCategoriesToRollUp>
  </TemplateData>
  <TemplateContent>
    <Project TargetFileName="ContosoWebFormsMvc.csproj"
      File="ContosoWebFormsMvc.csproj"
      ReplaceParameters="true">   
    </Project>
  </TemplateContent>
</VSTemplate>

Это стандартный файл .vstemplate; вы найдете ссылку на этот файл на bit.ly/18T090m. В процессе сборки шаблона файлы из проекта будут объединены, и содержимое будет помещено в созданный конечный файл .vstemplate, используемый для шаблона. Здесь следует отметить несколько элементов. Вы должны обновить следующие элементы под TemplateData.

  • Name Имя вашего шаблона, показываемое в диалоге New Project.
  • Description Описание вашего проекта, отображаемое по правой стороне диалога New Project при выборе вашего шаблона.
  • DefaultName Имя по умолчанию для нового проекта. К нему будет автоматически дописываться номер на основе содержимого каталога.
  • SortOrder Определяет позицию шаблона относительно остальных шаблонов. Должен быть кратен 10; чем меньше число, тем выше элемент поднимается в соответствующем списке в Visual Studio.
  • NumberOfParentCategoriesToRollup Определяет количество родительских узлов, в которых будет показываться шаблон.

Также проверьте и перепроверьте значения атрибутов TargetFileName и File в теге Project. Они должны совпадать с именем проекта на диске. Когда TemplateBuilder обрабатывает этот файл, в конечный файл .vstemplate объединяются файлы исходного кода, перечисленные в проекте. Если вам нужна особая обработка конкретных файлов, вы можете перечислить их под элементом Project. См. ссылку на .vstemplate, приведенную ранее.

Теперь, когда вы адаптировали файлы _preprocess.xml и .vstemplate.xml, нужно протестировать шаблон. Убедитесь, что проект VSIX сконфигурирован как стартовый в Visual Studio, и нажмите Ctrl+F5. Это приведет к запуску Experimental Instance среды Visual Studio, и ваш шаблон проекта будет автоматически загружен. Откройте диалог New Project. Если вы перейдете в то место, которое было задано в файле _preprocess.xml, то должны увидеть свой только что созданный шаблон. Создайте новый проект, используя этот шаблон, чтобы проверить его. Убедитесь, что все работает, как ожидалось.

Если все работает нормально, мои поздравления: вы только что создали своей первый шаблон проекта. Если вы хотите установить этот шаблон или поделиться им с другими, перейдите в свою папку bin и найдите файл VSIX, который и нужно установить. Если вы (или ваша группа) планируете разместить свой проект в репозитарии Git, потребуется один дополнительный шаг.

Когда вы создаете проект VSIX или VSPackage, Visual Studio обновляет файл вашего проекта значениями для тегов StartProgram и StartArguments. Эти значения используются для корректной работы клавиш F5 и Ctrl+F5. Однако эти изменения вносятся лишь индивидуально для каждого пользователя. Когда вы добавляете свой проект в собственный репозитарий, Visual Studio не включает эти изменения. Они сохраняются в файле .user, который не вводится в систему контроля исходного кода, поэтому, когда другой пользователь открывает решение и пытается запустить проект в Experimental Instance, он может не работать. Чтобы исправить это, просто откройте файл .csproj своего проекта и добавьте в него следующие строки перед самым концом первой группы свойств:

<StartProgram Condition=" '$(StartProgram)'=='' ">
  $(DevEnvDir)\devenv.exe</StartProgram>
  <StartArguments Condition=" '$(StartArguments)'=='' ">
  /rootsuffix Exp</StartArguments>

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

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

Если вы хотите сделать свое расширение общедоступным, его можно загрузить в Visual Studio Gallery (bit.ly/115mBzm). Если ваше расширение содержит более одного шаблона (проекта или элемента), то на данный момент Gallery не принимает такие расширения. Вместо прямой загрузки подобные расширения можно загрузить в Visual Studio Gallery в виде ссылки. Если вы так и делаете, то должны разместить файл .vsix по общедоступному URL. Для хостинга файла .vsix можно использовать vsixgallery.com; кроме того, этот сайт разрешает хостинг ежевечерних сборок. Их публикацию на vsixgallery.com можно легко автоматизировать, используя Windows PowerShell или C#.

Мы рассказали лишь об основах создания шаблонов проектов. Есть много других сценариев, где применяются шаблоны с несколькими проектами (multi-project templates), пользовательские мастера и т. д. За подробностями обращайтесь на вики-страницу по SideWaffle на GitHub. А теперь пора перейти к шаблонам элементов.

Добавление шаблонов элементов

Помимо создания собственных шаблонов проектов, SideWaffle позволяет создавать и собственные шаблоны элементов. Мы добавим их в только что созданный проект расширения.

Ранее мы обратили внимание на то, что проект использовал Bootstrap 3, jQuery и Modernizr. После создания базового проекта нам приходилось для каждой новой страницы веб-сайта вручную создавать новый HTML-файл и включать все CSS- и JavaScript-файлы. Было бы здорово создать свой шаблон элемента, который делает все это за нас.

К счастью, TemplateBuilder обрабатывает шаблоны проекта и элемента одним и тем же способом, чтобы все оставалось согласованным для работы с обоими шаблонами, поэтому некоторые этапы создания шаблона элемента (item template) идентичны таковым для шаблона проекта. При сборке шаблоны элемента и проекта обрабатываются почти одинаково. Если вы начинаете с нового проекта, обязательно добавьте сначала NuGet-пакет TemplateBuilder.

Далее создайте папку ItemTemplates в проекте VSIX. Как показано на рис. 3, это папка, где будут храниться все шаблоны элементов.

Ваш шаблон будет отображаться в папке Web
Рис. 3. Ваш шаблон будет отображаться в папке Web

Прямо в папке ItemTemplates вы создадите каталоги для файлов шаблонов элементов. Первым дочерним элементом ItemTemplates будет узел, в котором шаблон появится по умолчанию. Например, на рис. 3 видно, что мы создали папку Web, поэтому шаблоны в этой папке появятся в Visual C#\Web или Visual Basic\Web и аналогичным образом для других языков. Для изменения этого можно использовать _preprocess.xml, но в этом примере мы поместим все шаблоны элементов в папку Web.

Теперь создадим наш первый шаблон элемента. Для каждого шаблона элемента создается уникальная папка в папке Web, затем добавляется наш первый шаблон элемента — базовый шаблон bootstrap. Для начала создадим новую папку в Web с именем Bootstrap 3 Basic Template. Этот шаблон будет содержать два HTML-файла (HTMLPage1.html и HTMLPage2.html), поэтому поместите их в папку View. В этом примере для обоих файлов можно использовать содержимое с рис. 4, взятое из документации Bootstrap 3 на bit.ly/1iKHGX3.

Рис. 4. Базовый HTML5-шаблон Bootstrap

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width,
    initial-scale=1">
  <title>Basic Bootstrap Template</title>
  <link href="css/bootstrap.min.css" rel="stylesheet">

  <!-- HTML5-прослойка и Respond.js для поддержки IE8 -->
  <!-- HTML5-элементов и media-запросов. -->
  <!-- Внимание: Respond.js не работает,
  <!-- если вы просматриваете страницу через file:// -->
  <!--[if lt IE9]>
  <script src="https://oss.maxcdn.com/html5shiv/3.7.2/
    html5shiv.min.js"></script>
  <script src="https://oss.maxcdn.com/respond/1.4.2/
    respond.min.js"></script>
  <![endif]-->
</head>
<body>
  <h1>Hello, world!</h1>

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/
    1.11.2/jquery.min.js">
    </script>
  <script src="js/bootstrap.min.js"></script>
</body>
</html>

После добавления файлов исходного кода для создания шаблона мы добавим файлы, которые включают метаданные о шаблоне элемента. Для этого щелкните правой кнопкой мыши папку Bootstrap 3 Basic Template и выберите Add New Item. Как показано на рис. 5, укажите SideWaffle Item Template под узлом Extensibility.

SideWaffle Item Template находится в узле Extensibility диалога Add New Item
Рис. 5. SideWaffle Item Template находится в узле Extensibility диалога Add New Item

Помимо создания собственных шаблонов проектов, SideWaffle позволяет создавать и собственные шаблоны элементов.

Значение в поле Name здесь игнорируется, потому что имена файлов «зашиты» в код. Используя шаблон SideWaffle Item Template, вы получаете четыре файла в новой папке с именем Definitions (рис. 6). Эти четыре файла (CSharp.vstemplat-, VB.vstemplat-, Web.csharp.vstemplat- и Web.VB.vstemplat-) соответствуют поддерживаемым высокоуровневым языкам/проектам. CSharp.vstemplate применяется для шаблонов, которые появятся в узле Visual C# для проектов на C#, а VB.vstemplate — для шаблонов, которые появятся в узле Visual Basic в диалоге New Item. Два файла с упоминанием Web отображаются как шаблоны для веб-проектов. Заметьте: чтобы вывести название своего шаблона, нужно сменить расширение с CSharp.vstemplat- на CSharp.vstemplate. Вы можете удалять файлы, которые вас не интересуют. Как показано на рис. 6, мы сохраняем все четыре файла и меняем расширение на .vstemplate.

SideWaffle Item Template добавляет папку Definitions и четыре файла .vstemplate
Рис. 6. SideWaffle Item Template добавляет папку Definitions и четыре файла .vstemplate

Теперь нужно отредактировать файлы .vstemplate, чтобы включить в шаблон два исходных HTML-файла, поэтому мы добавим некоторые элементы ProjectItem в файл CSharp.vstemplate под элемент TemplateContent. Содержимое файла должно выглядеть так, как показано на рис. 7.

Рис. 7. Пример файла _project.vstemplate.xml с несколькими файлами, добавленными в шаблон элемента

<VSTemplate Version="3.0.0"
  xmlns="http://schemas.microsoft.com/developer/
    vstemplate/2005" Type="Item">
  <TemplateData>
    <ProjectType>CSharp</ProjectType>
 
    <DefaultName>Bootstrap 3 Basic Template.txt</DefaultName>
    <Name>Bootstrap 3 Basic Template</Name>
    <Description>A basic HTML5 template using Bootstrap 3
    </Description>
    <Icon>icon.png</Icon>
    <NumberOfParentCategoriesToRollUp>1
    </NumberOfParentCategoriesToRollUp>
  </TemplateData>
  <TemplateContent>
    <References />

    <ProjectItem TargetFileName="View/HTMLPage1.html" >
      View/HTMLPage1.html</ProjectItem>
    <ProjectItem TargetFileName="View/HTMLPage2.html" >
      View/HTMLPage2.html</ProjectItem>
 
  </TemplateContent>
</VSTemplate>

Как видите, мы добавили две записи ProjectItem, соответствующие двум созданным нами файлам. Значение элемента указывает на файл на диске, где находится содержимое шаблона. Значение TargetFileName будет определять имена файлов, которые появятся, когда будет вызван диалог New Item.

Добавив шаблон элемента и включив свои файлы, вы можете протестировать шаблон элемента. Как и в прошлый раз, нажмите Ctrl+F5, чтобы открыть Experimental Instance среды Visual Studio, создайте или откройте проект-пример и опробуйте свой шаблон.

Далее мы обсудим фрагменты, но сначала одно замечание по поводу замен. В разделе по шаблонам проектов вы видели, как можно использовать _preprocess.xml для обновления контента проекта в процессе сборки шаблона. Если вам нужно выполнить какие-либо замены для шаблонов элементов, то можете использовать те же приемы. Как и в случае шаблонов проектов, мы рассказали лишь об основах создания шаблонов элементов. Очень многое мы даже не упомянули: применение пользовательских мастеров, встраивание значков как ресурсов, вложение файлов и др. Информацию по этим вопросам можно изучить по существующему контенту стандартных шаблонов Visual Studio, а также на вики-странице SideWaffle в GitHub.

Как добавлять фрагменты

У всех нас есть фрагменты кода, которые мы регулярно используем в наших проектах. Если вас интересовало, существует ли какой-нибудь способ заставить Visual Studio отслеживать ваши любимые фрагменты, то вам повезло. Как и раньше, начните с создания проекта VSIX и обновите поля автора и описания в source.extension.vsixmanifest.

Чтобы Visual Studio читал ваши файлы фрагментов, нужно создать соответствующую структуру папок. На рис. 8 показана такая структура на тот случай, если бы вам приходилось создавать фрагменты для каждого языка программирования.

Показанные здесь папки автоматически обнаруживаются Visual Studio
Рис. 8. Показанные здесь папки автоматически обнаруживаются Visual Studio

Создав нужные папки, вы можете добавлять свои файлы фрагментов в папку SideWaffle для соответствующего языка. Добавляя каждый файл, щелкайте его и смотрите на его Build Action в окне свойств. У каждого файла свойство Build Action должно быть установлено в Content, чтобы Visual Studio автоматически включал этот файл в проект VSIX при его сборке.

Затем надо добавить файл определения пакета в корневой каталог вашего проекта. Файл .pkgdef установит некоторые разделы и параметры реестра, что позволит вам использовать фрагменты, добавленные на последнем этапе. Поскольку Visual Studio не поставляется с Item Template для файлов .pkgdef, вам придется создать текстовый файл и переименовать его расширение в .pkgdef. Имя файла .pkgdef может быть каким угодно, но, чтобы не усложнять, мы назвали свой файл так: snippets.pkgdef. Как показано на рис. 9, для каждого используемого языка требуется изменять его раздел реестра.

Рис. 9. Файл определения пакета, содержащий информацию реестра для каждого языка

// ---------------------- SNIPPETS ----------------------

// Visual Basic
[$RootKey$\Languages\CodeExpansions\Basic\Paths]
"My Snippets"=
  "$PackageFolder$\Snippets\VisualBasic\My Snippets"

// C++
[$RootKey$\Languages\CodeExpansions\C/C++\Paths]
"My Snippets"="$PackageFolder$\Snippets\C++\My Snippets"

// C#
[$RootKey$\Languages\CodeExpansions\CSharp\Paths]
"My Snippets"="$PackageFolder$\Snippets\CSharp\My Snippets"

// CSS
[$RootKey$\Languages\CodeExpansions\CSS\Paths]
"My Snippets"="$PackageFolder$\Snippets\CSS\My Snippets"

// HTML
[$RootKey$\Languages\CodeExpansions\HTML\Paths]
"My Snippets"=""$PackageFolder$\Snippets\HTML\My Snippets"

// JavaScript
[$RootKey$\Languages\CodeExpansions\JavaScript\Paths]
"My Snippets"="$PackageFolder$\Snippets\JavaScript\My Snippets"

// SQL
[$RootKey$\Languages\CodeExpansions\SQL_SSDT\Paths]
"My Snippets"="$PackageFolder$\Snippets\SQL\My Snippets"

// XML
[$RootKey$\Languages\CodeExpansions\XML\Paths]
"My Snippets"="$PackageFolder$\Snippets\XML\My Snippets"

Последний шаг перед тестированием новых фрагментов — регистрация файла .pkgdef file. Откройте файл source.extension.vsixmanifest, перейдите на вкладку Assets и щелкните кнопку New. Вы увидите диалог Add New Asset с несколькими параметрами. Выберите Microsoft.VisualStudio.VsPackage в качестве типа ресурса (рис. 10).

Регистрация файла определения пакета в Visual Studio
Рис. 10. Регистрация файла определения пакета в Visual Studio

Затем в поле Source укажите File on filesystem. Это приведет к расширению окна, что позволит найти созданный вами файл .pkgdef file you created. Выберите этот файл и щелкните OK.

Теперь вы готовы протестировать свои фрагменты. Как и раньше, нажмите Ctrl+F5, чтобы открыть Experimental Instance среды Visual Studio. Потом откройте проект, использовавшийся ранее для тестирования, и перейдите по пути Tools | Code Snippets Manager. Если все загружается правильно, проверка успешно завершена.

Мы рассмотрели основные преимущества SideWaffle: шаблоны проектов и элементов, а также фрагменты кода. Что дальше?

В настоящее время группа разработки активно работает над динамическими шаблонами для SideWaffle, которые, как мы надеемся, будут готовы к следующему выпуску. Они намного упростят создание и сопровождение шаблонов. Идея в том, что вы можете публиковать свои шаблоны в репозитарии Git или в сетевой папке и делиться ими с коллегами и друзьями. Далее вы можете сконфигурировать SideWaffle на загрузку шаблонов из удаленного местоположения. Конечный пользователь сможет управлять тем, насколько часто следует выполнять проверку на наличие обновлений. Более подробную информацию см. на странице Dynamic Template (bit.ly/18DepKM).

Заключение

Как вы видели в этой статье, создавать собственные шаблоны довольно легко. Теперь, когда вы знаете, как это делается, вы можете продемонстрировать своим коллегам, сколько времени экономится при использовании SideWaffle. Помните: при желании поделиться пакетом шаблонов с сообществом загружайте его в Visual Studio Gallery, и vsixgallery.com всегда доступен, если эта галерея понадобится вам. Если вы хотите поделиться своими шаблонами через SideWaffle, присылайте нам запрос-извещение на GitHub.


Тайлер Хьюз (Tyler Hughes) — недавний выпускник Государственного университета Джексонвиля, где он изучал компьютерные информационные системы. Ранее в течение пяти лет был разработчиком-любителем, а сейчас входит в группу разработчиков SideWaffle.

Саид Ибрагим Хашими (Sayed Ibrahim Hashimi) — старший менеджер программ в Microsoft в группе Visual Studio Web. Написал несколько книг по технологиям Microsoft и является создателем SideWaffle и TemplateBuilder, а также соавтором OmniSharp.