Поделиться через


Практическое руководство. Использование мастеров для шаблонов проекта

Visual Studio предоставляет интерфейс IWizard, который позволяет запускать пользовательский код, когда пользователь создает проект на основе шаблона.

Настройка шаблона проекта может использоваться для:

  • Отображения настраиваемых пользовательских интерфейсов, содержащих пользовательский ввод для параметризации шаблона.

  • Добавления значений параметра для использования в шаблоне.

  • Добавления дополнительных файлов в шаблон.

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

Методы интерфейса IWizard вызываются в различные моменты времени при создании проекта, запускающиеся сразу после того, как пользователь щелкает ОК в диалоговом окне Новый проект. Имя каждого метода интерфейса соответствует точке, откуда он вызывается. Например, Visual Studio вызывает RunStarted, когда создает проект, создавая удобное место для написания пользовательского кода для сбора пользовательского ввода.

Большая часть кода, который написан для пользовательских мастеров, будет использовать объект DTE, который является основным объектом в модели автоматизации объектов Visual Studio для настройки проекта. Дополнительные сведения о модели автоматизации объектов содержатся в Расширение среды Visual Studio и Справочник по автоматизации и возможностям расширения среды.

Создание пользовательских мастеров шаблонов

В этом разделе показано, как создать пользовательский мастер, открывающий форму Windows Forms до создания проекта. Форма позволяет пользователю добавить значение пользовательских параметров, которое будет затем добавлено к исходному коду во время создания проекта. Ниже приведены основные этапы, каждый из которых подробно описан.

Чтобы создать пользовательский мастер шаблонов

  1. Создайте сборку, которая реализует интерфейс IWizard.

  2. Установите сборку в глобальный кэш сборок.

  3. Создайте проект и используйте мастер Экспорт шаблона для создания шаблона из проекта.

  4. Измените шаблон, добавляя элемент WizardExtension в файле .vstemplate, чтобы привязать шаблон к сборке, которая реализует IWizard.

  5. Создайте новый проект с помощью пользовательского мастера.

Реализация IWizard

Первым шагом в этом процессе является создание сборки, реализующей IWizard. Эта сборка использует метод RunStarted для отображения формы Windows Forms, которая позволяет пользователю добавлять значение пользовательского параметра, которое затем будет использоваться во время создания проекта.

Примечание

В этом примере Visual C# используется для реализации IWizard, хотя также возможно использование Visual Basic.

Чтобы реализовать IWizard

  1. Создайте новый проект библиотеки классов.

  2. Создайте класс, реализующий интерфейс IWizard. См. код ниже для Visual C# примера полностью реализованного интерфейса IWizard.

Этот пример содержит два файла кода: IWizardImplementation – класс, реализующий интерфейс IWizard, и UserInputForm – форма Windows Forms для пользовательского ввода.

Класс IWizardImplementation

Класс IWizardImplementation содержит методы реализации для каждого члена IWizard. В этом примере только метод RunStarted выполняет задачу. Все другие методы ничего не совершают или возвращают true.

Метод RunStarted принимает четыре параметра:

  • Параметр Object, который может быть приведен к корневому объекту _DTE, чтобы позволять настраивать проект.

  • Параметр Dictionary<TKey, TValue>, содержащий коллекцию всех предварительно определенных параметров в шаблоне. Дополнительные сведения о параметрах шаблона содержатся в разделе Параметры шаблона.

  • Параметр WizardRunKind, содержащий сведения о том, какого рода шаблон уже используется.

  • Массив Object, содержащий набор параметров, передающихся мастеру Visual Studio.

В этом примере добавляется значение из пользовательской формы ввода для параметра Dictionary<TKey, TValue>. Каждый экземпляр параметра $custommessage$ в проекте будет заменен текстом, введенным пользователем.

using System;
using System.Collections.Generic;
using Microsoft.VisualStudio.TemplateWizard;
using System.Windows.Forms;
using EnvDTE;

namespace CustomWizard
{
    public class IWizardImplementation:IWizard
    {
        private UserInputForm inputForm;
        private string customMessage;

        // This method is called before opening any item that 
        // has the OpenInEditor attribute.
        public void BeforeOpeningFile(ProjectItem projectItem)
        {
        }

        public void ProjectFinishedGenerating(Project project)
        {
        }
        
        // This method is only called for item templates,
        // not for project templates.
        public void ProjectItemFinishedGenerating(ProjectItem 
            projectItem)
        {
        }

        // This method is called after the project is created.
        public void RunFinished()
        {
        }

        public void RunStarted(object automationObject,
            Dictionary<string, string> replacementsDictionary,
            WizardRunKind runKind, object[] customParams)
        {
            try
            {
                // Display a form to the user. The form collects 
                // input for the custom message.
                inputForm = new UserInputForm();
                inputForm.ShowDialog();

                customMessage = inputForm.get_CustomMessage();

                // Add custom parameters.
                replacementsDictionary.Add("$custommessage$", 
                    customMessage);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }

        // This method is only called for item templates,
        // not for project templates.
        public bool ShouldAddProjectItem(string filePath)
        {
            return true;
        }        
    }
}

Пользовательская форма ввода

Пользовательская форма ввода представляет собой простую форму для ввода пользовательских параметров. Форма содержит текстовое поле с именем textBox1 и кнопку с именем button1. При нажатии кнопки текст из текстового поля сохраняется в параметре customMessage.

Чтобы добавить форму Windows Forms в решение

  1. В меню Проект выберите команду Добавить новый элемент.

  2. Нажмите кнопку Форма Windows Forms, назовите файл UserInputForm.cs и нажмите кнопку ОК.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

namespace CustomWizard
{
    public partial class UserInputForm : Form
    {
        private string customMessage;

        public UserInputForm()
        {
            InitializeComponent();
        }
       
        public string get_CustomMessage()
        {
            return customMessage;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            customMessage = textBox1.Text;

            this.Dispose();
        }
    }
}

Установка сборки в глобальный кэш сборок

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

Чтобы установить сборку в глобальный кэш сборок

  1. Подпишите сборку строгим именем. Дополнительные сведения см. в разделе Практическое руководство. Подписание сборки строгим именем или Практическое руководство. Подписывание сборки (Visual Studio).

  2. Установите сборку со строгим именем в глобальный кэш сборок. Дополнительные сведения см. в разделе Практическое руководство. Установка сборки в глобальный кэш сборок.

Создание проекта для использования в качестве шаблона

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

Чтобы создать пример проекта

  1. Создайте новое консольное приложение Visual C#.

  2. В методе Main приложения добавьте следующую строку кода.

    Console.WriteLine("$custommessage$");
    

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

  3. В меню Файл выберите команду Экспорт шаблона.

  4. В мастере Экспорт шаблона нажмите кнопку Шаблон проекта, выберите нужный проект и нажмите Далее.

  5. В мастере Экспорт шаблона введите описательную информацию о шаблоне, установите флажок Автоматически импортировать шаблон в Visual Studio и нажмите кнопку Готово.

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

В следующем примере приведен полный файл кода, прежде чем он был экспортирован в шаблон.

using System;
using System.Collections.Generic;
using System.Text;

namespace TemplateProject
{
    class WriteMessage
    {
        static void Main(string[] args)
        {
            Console.WriteLine("$custommessage$");
        }
    }
}

Изменение шаблона

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

Чтобы добавить пользовательский мастер в шаблон

  1. Найдите файл с расширением ZIP, содержащий шаблон.

    1. В меню Сервис выберите пункт Параметры.

    2. Нажмите кнопку Проекты и решения.

    3. Проверьте текстовое поле Расположение пользовательских шаблонов проектов Visual Studio. Дополнительные сведения см. в разделе "Общие", страница "Проекты и решения", диалоговое окно "Параметры".

    По умолчанию это расположение – My Documents\Visual Studio 2010\Templates\ProjectTemplates.

  2. Извлеките ZIP-файл.

  3. Откройте файл .vstemplate в Visual Studio.

  4. После элемента TemplateContent добавьте элемент Элемент WizardExtension (шаблоны Visual Studio), указав строгое имя сборки пользовательского мастера. Дополнительные сведения для отыскания строгого имени сборки содержатся в разделе Практическое руководство. Просмотр содержимого глобального кэша сборок Практическое руководство. Создание ссылки на сборку со строгим именем.

    В следующем примере создается элемент WizardExtension.

    <WizardExtension>
        <Assembly>CustomWizard, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=fa3902f409bb6a3b</Assembly>
        <FullClassName>CustomWizard.IWizardImplementation</FullClassName>
    </WizardExtension>
    

Использование пользовательского мастера

Теперь можно создать проект из шаблона и использовать пользовательский мастер.

Чтобы использовать пользовательский мастер

  1. В меню Файл щелкните Создать проект.

  2. В диалоговом окне Новый проект найдите ваш шаблон, введите имя и нажмите кнопку ОК.

    Откроется форма ввода пользовательского мастера.

  3. Введите значение для пользовательского параметра и нажмите кнопку.

    Форма ввода пользовательского мастера закроется, и проект создастся с помощью шаблона.

  4. В обозревателе решений щелкните правой кнопкой мыши файл исходного кода и нажмите кнопку Просмотреть код.

    Обратите внимание на то, что $custommessage$ был заменен текстом, введенным в форму ввода пользовательского мастера.

См. также

Ссылки

Элемент WizardExtension (шаблоны Visual Studio)

IWizard

Другие ресурсы

Дополнительные процедуры процесса создания шаблонов