Como usar assistentes com modelos do 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.
É possível usar a personalização do modelo de projeto para:
Exiba a UI personalizada que coleta a entrada do usuário para parametrizar o modelo.
Adicione os valores de parâmetro a serem usados no modelo.
Adicione arquivos extras ao modelo.
Execute praticamente todas as ações permitidas 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 durante a criação do projeto, iniciando assim que o usuário clica em OK,na caixa de diálogo Novo Projeto.Cada método da interface é denominado para descrever o ponto em que é chamado.Por exemplo, Visual Studio chama RunStarted imediatamente no início da criação do projeto, tornando-o um bom local para gravar o código personalizado para a coleta de entrada do usuário.
A maioria dos códigos que você grava para os assistentes personalizados usará o objeto DTE, que é o principal objeto no modelo de objeto de automação do Visual Studio, para personalizar o projeto.Para obter mais informações sobre o modelo de objeto de automação, consulte Estendendo o ambiente do Visual Studio e Referência sobre automação e extensibilidade.
Criando um assistente de modelo personalizado
Esse tópico mostra como criar um assistente personalizado que abre um Formulário do Windows antes da criação do projeto.O formulário permite que o usuário adicione um valor de parâmetro personalizado, que será adicionado ao código fonte durante a criação do projeto.As principais etapas, explicadas em detalhes, são as seguintes.
Para criar um assistente de modelo personalizado
Crie um assembly que implementa a interface IWizard.
Instale o assembly no cache global de assembly.
Crie um projeto e use o assistente Exportação de Modelo para criar um modelo do projeto.
Modifique o modelo, adicionando um elemento WizardExtension no arquivo .vstemplate para vincular o modelo ao assembly que implementa a IWizard.
Crie um novo projeto usando o assistente personalizado.
Implementando o IWizard
A primeira etapa do processo é criar um assembly que implemente o IWizard.Este assembly usa o método RunStarted para exibir um Formulário do Windows que permite ao usuário adicionar um valor de parâmetro personalizado, que será usado durante a criação do projeto.
Observação |
---|
Esse exemplo usa Visual C# para implementar IWizard, embora também seja possível usar Visual Basic. |
Para implementar o IWizard
Crie um novo projeto de biblioteca de classes.
Crie uma nova classe que implemente a interface IWizard.Consulte o código a seguir para obter um exemplo Visual C# de uma interface IWizard totalmente implementada.
Esse exemplo contém dois arquivos de código: IWizardImplementation, uma classe que implementa a interface IWizard e UserInputForm, o Formulário do Windows 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 a personalização do projeto.
Um parâmetro Dictionary que contém uma coleção de todos os parâmetros pré-definidos no modelo.Para obter mais informações sobre os parâmetros de 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.
Esse exemplo adiciona um valor de parâmetro do formulário de entrada do usuário ao parâmetro Dictionary.Cada instância do parâmetro $custommessage$ no projeto será substituída pelo texto inserido pelo usuário.Você deve adicionar os seguintes assemblies ao seu projeto:
EnvDTE.dll
Microsoft.VisualStudio.TemplateWizardInterface.dll
System.Windows.Forms.dll
Importante |
---|
O UserInputForm usado nesse exemplo é definido na seção a seguir. |
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 a inserção de um parâmetro personalizado.O formulário contém uma caixa de texto denominada textBox1 e um botão denominado button1.Quando o botão é clicado, a caixa de texto é armazenada no parâmetro customMessage.
Para adicionar um Formulário do Windows à solução
- Adicione o seguinte código ao arquivo que contém as implementações de assistente.
public partial class UserInputForm : Form
{
private string customMessage;
private TextBox textBox1;
public UserInputForm()
{
textBox1 = new TextBox();
this.Controls.Add(textBox1);
}
public string get_CustomMessage()
{
return customMessage;
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
customMessage = textBox1.Text;
this.Dispose();
}
}
Instalando o assembly no cache global de assembly
O assembly que implementa o IWizard deve ser assinado com um name forte e instalado no cache global de assembly.
Para instalar o assembly no cache global de assembly
Registre 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).
Instale o assembly de nome forte no cache global de assembly.Para obter mais informações, consulte Como instalar um assembly no cache de assemblies global.
Criando um projeto para usar como modelo
Nesse exemplo, o projeto usado como modelo é um aplicativo do console que exibe a mensagem especificada no formulário de entrada de usuário do assistente personalizado.
Para criar o projeto de exemplo
Crie um novo aplicativo de console Visual C#.
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.
No menu Arquivo, clique em Exportar Modelo.
No assistente Exportar Modelo, clique em Modelo de Projeto, selecione o projeto correto e clique em Avançar.
No assistente Exportar Modelo, digite a informação descritiva sobre o modelo, selecione a caixa de seleção Importar automaticamente o modelo para o Visual Studio e clique em Concluir.
Agora o modelo aparece na caixa de diálogo Novo Projeto, 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 Novo Projeto, modifique-o para ele usar o assembly que você criou nas etapas anteriores.
Para adicionar o assistente personalizado ao modelo
Localize o arquivo .zip que contém o modelo.
No menu Ferramentas, clique em Opções.
Clique em Projetos e Soluções.
Leia a caixa de textoLocal dos modelos de projeto de usuário do Visual Studio.
Por padrão, esse local é My Documents\Visual Studio Version\Templates\ProjectTemplates.
Extraia o arquivo.zip.
Abra o arquivo .vstemplate no Visual Studio.
Após o elemento TemplateContent, adicione um elemento Elemento WizardExtension (modelos do Visual Studio) com o nome forte do seu assembly de assistente personalizado.Para obter mais informações sobre localização de nome forte do seu assembly, consulte Como exibir o conteúdo do cache de assemblies globale Como referenciar um assembly de nome forte.
O exemplo a seguir mostra 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, será possível criar um projeto a partir de seu modelo e usar o assistente personalizado.
Para usar o assistente personalizado
No menu Arquivo, clique em Novo Projeto.
Na caixa de diálogo Novo Projeto, localize seu modelo, digite um nome e clique em OK.
O formulário de entrada do usuário de assistente é aberto.
Digite um valor para o parâmetro personalizado e clique no botão.
O formulário de entrada do usuário de assistente fecha e um projeto é criado a partir do modelo.
No Gerenciador de Soluções, clique com o botão direito do mouse no arquivo de código fonte e clique em Exibir Código.
Observe que o $custommessage$ foi substituído pelo texto inserido no formulário de entrada do usuário de assistente.
Consulte também
Referência
Elemento WizardExtension (modelos do Visual Studio)