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
Criar um assembly que implementa a interface IWizard.
Instalar o assembly no cache global de assemblies.
Criar um projeto e usar o assistente Export Template para criar um modelo do projeto.
Modificar o modelo, adicionando o elemento WizardExtension no arquivo .vstemplate para vincular o modelo ao assembly que implementa a IWizard..
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
Criar um novo projeto de biblioteca de classes.
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
No menu Project, clique em Add New Item.
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
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).
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
Criar 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 File, clique em Export Template.
No assistente Export Template, clique em Project Template, selecione o projeto correto e clique em Next.
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
Localize o arquivo.zip que contém o modelo.
No menu Tools, clique em Options.
Clique em Projects and Solutions.
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.
Extraia o arquivo.zip.
Abra o arquivo .vstemplate no Visual Studio.
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
On the Arquivo menu, clicar Novo projeto.
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.
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.
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)