Compartilhar via


Como: Usar assistentes com modelos de projeto

O Visual Studio fornece a interface IWizard que, quando implementada, permite que você execute o código personalizado quando um usuário cria um projeto de um modelo.

A personalização do modelo de projeto pode ser usada para:

  • Exibir UI personalizada que coleta a entrada do usuário para parametrizar o modelo.

  • Adicionar valores de parâmetro a serem usados no modelo.

  • Inserir arquivos adicionais para o modelo.

  • Executar praticamente qualquer ação permitida pelo modelo de objeto de automação do Visual Studio em um projeto.

Os métodos da interface de IWizard são chamados em vários momentos enquanto o projeto está sendo criado, começando assim que o usuário clica OK na caixa de diálogo New Project.Cada método da interface é denominado para descrever o ponto em que é chamado.Por exemplo, Visual Studio chamadas RunStarted imediatamente quando ele começará a criar o projeto, tornando-o um mercadoria local escrever o código personalizado coletar a entrada do usuário.

A maior parte do código que você escreve para os assistentes personalizados irá usar o objeto DTE, que é o principal objeto no modelo de objeto de automação do Visual Studio , para personalizar o projeto.Para mais informações sobre o modelo de automação de objetos, ver Estendendo o ambiente Visual Studio and Automação e referência a extensibilidade.

Criando um Assistente de Modelo Personalizado

Este tópico mostra como criar um assistente personalizado que abre um Windows Form antes que o projeto seja criado.O formulário permite que o usuário adicione um valor de parâmetro personalizado que irá ser adicionado ao código fonte durante a criação do projeto.As principais etapas, cada uma explicada em detalhes, são as seguintes.

Para criar um assistente de modelo personalizado

  1. Criar um assembly que implementa a interface IWizard.

  2. Instalar o assembly no cache global de assemblies.

  3. Criar um projeto e usar o assistente Export Template para criar um modelo do projeto.

  4. Modificar o modelo, adicionando o elemento WizardExtension no arquivo .vstemplate para vincular o modelo ao assembly que implementa a IWizard..

  5. Criar um novo projeto usando o assistente personalizado.

Implementando a IWizard

A primeira etapa do processo é criar um assembly que implementa a IWizard.Este assembly usa o método RunStarted para exibir um formulário Windows que permite ao usuário adicionar um valor de parâmetro personalizado, que será usado durante a criação do projeto.

Observação:

Este exemplo usa Visual C# para implementar IWizard, embora também possa usar Visual J# ou Visual Basic.

Para implementar a IWizard

  1. Criar um novo projeto de biblioteca de classes.

  2. Crie uma nova classe que implemente a interface IWizard.Ver o código para um exemplo Visual C# de uma interface IWizard totalmente implementado.

Este exemplo contém dois arquivos de código: IWizardImplementation, uma classe que implementa o IWizard interface, e UserInputForm, o Windows formulário para entrada do usuário.

Classe IWizardImplementation

A classe IWizardImplementation contém implementações para cada membro do método IWizard.Nesse exemplo, apenas o método RunStarted executa uma tarefa.Todos os outros métodos não fazem nada ou retornam true.

O método RunStarted aceita quatro parâmetros:

  • Um parâmetro Object que pode ser convertido para a raiz do objeto _DTE, para permitir que você personalize o projeto.

  • Um parâmetro Dictionary<TKey, TValue> que contém uma coleção de todos os parâmetros pré-definidos no modelo.Para obter mais informações sobre os parâmetros do modelo, consulte Parâmetros de modelo.

  • Um parâmetro WizardRunKind que contém informações sobre o tipo de modelo que está sendo usado.

  • Uma matriz Object que contém um conjunto de parâmetros passados para o assistente pelo Visual Studio.

Este exemplo adiciona um valor de parâmetro do formulário de entrada do usuário para o parâmetro Dictionary<TKey, TValue>.Cada ocorrência do parâmetro $custommessage$ no projeto será substituída pelo texto inserido pelo usuário.

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;
        }        
    }
}

Formulário de entrada do usuário

O formulário de entrada do usuário fornece um formulário simples para inserir um parâmetro personalizado.O formulário contém uma caixa de texto chamada textBox1 e um botão chamado button1.Quando o botão é clicado, o texto da caixa é armazenado no parâmetro customMessage.

Para adicionar um Windows Form à solução

  1. No menu Project, clique em Add New Item.

  2. Clique em Windows Form, nomeie o arquivo UserInputForm.cs e clique em OK.

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();
        }
    }
}

Instalando o Assembly no Cache Global de Assemblies

O assembly que implementa a IWizard deve ser assinado com um strong name e instalado no cache global de assemblies.

Para instalar o assembly no cache global de assemblies

  1. Assine o Assembly com um nome forte.Para obter mais informações, consulte Como: Assinar um assembly com um nome forte ou Como: Assinar um assembly (Visual Studio).

  2. Instalar o strong-Named Assembly para o cache global de assemblies.Para obter mais informações, consulte Como: Instalar um assembly no cache global de assemblies.

Criando um Projeto para Usar como um Modelo

Neste exemplo, o projeto usado como modelo é um aplicativo do console que exibe a mensagem especificada no formulário de entrada do usuário do assistente personalizado.

Para criar o projeto exemplo

  1. Criar um novo aplicativo de console Visual C#.

  2. No método Main do aplicativo, adicione a seguinte linha de código.

    Console.WriteLine("$custommessage$");
    

    O parâmetro $custommessage$ é substituído pelo texto inserido no formulário de entrada do usuário quando um projeto é criado a partir do modelo.

  3. No menu File, clique em Export Template.

  4. No assistente Export Template, clique em Project Template, selecione o projeto correto e clique em Next.

  5. No assistente Export Template, digite a informação descritiva sobre o modelo, selecione a caixa de seleção Automatically import the template into Visual Studio e clique em Finish.

    O modelo agora aparece na caixa de diálogo New Project, mas não usa o assistente personalizado.

O exemplo a seguir mostra o arquivo de código completo antes de ser exportado para um modelo.

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

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

Modificando o Modelo

Agora que o modelo está criado e aparece na caixa de diálogo New Project, você deve modificá-lo para que ele use o assembly que você criou nas etapas anteriores.

Para adicionar o assistente personalizado ao modelo

  1. Localize o arquivo.zip que contém o modelo.

    1. No menu Tools, clique em Options.

    2. Clique em Projects and Solutions.

    3. Ler a caixa de texto do Visual Studio user project templates location.Para obter mais informações, consulte Geral, projetos e soluções, caixa de diálogo Options.

    Por padrão, este local está em My Documents\Visual Studio 2008\Templates\ProjectTemplates.

  2. Extraia o arquivo.zip.

  3. Abra o arquivo .vstemplate no Visual Studio.

  4. Após o elemento TemplateContent, adicione um elemento Elemento WizardExtension (Visual Studio Modelos) com o nome forte do seu conjunto assistente personalizado.Para obter mais informações sobre localizando o nome forte do seu conjunto, consulte Como: Exibir o conteúdo de cache de global Assembly e Como: Referência um assembly de nome forte.

    O exemplo a seguir mostra a um elemento WizardExtension.

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

Usando o Assistente Personalizado

Agora você pode criar um projeto a partir de seu modelo e usar o assistente personalizado.

Para usar o assistente personalizado

  1. On the Arquivo menu, clicar Novo projeto.

  2. Na caixa de diálogo New Project, localize seu modelo, digite um nome e clique em OK.

    O formulário de entrada do usuário assistente é aberto.

  3. Digite um valor para o parâmetro personalizado e clique no botão.

    O formulário de entrada do usuário assistente fecha e um projeto é criado a partir do modelo.

  4. No Solution Explorer, clique com o botão direito do mouse no arquivo do código fonte e clique em View Code.

    Observe que o $custommessage$ foi substituído pelo texto inserido no formulário de entrada do usuário assistente.

Consulte também

Referência

Elemento WizardExtension (Visual Studio Modelos)

IWizard

Outros recursos

Procedimentos de Modelos Avançados