Olá pessoal, tudo certo?
Voltando ao assunto principal, retomamos nossa discussão sobre templates e padrões para o ambiente de desenvolvimento. Lembrando sempre que uma das atividades do time de arquitetura é direcionar a equipe de desenvolvimento na adoção de boas práticas na produção de software, com qualidade e produtividade.
Recentemente, tive uma discussão com um time de arquitetos de um cliente, que questionava exatamente as alternativas para a padronização e uso de templates na plataforma Microsoft. Assim, perguntavam sobre customizações do ambiente de desenvolvimento, ou seja, customizações sobre o próprio Visual Studio, afim de direcionar o desenvolvedor no momento da criação de código. Focando a versão 2005, citamos 3 mecanismos básicos:
Neste post, vamos falar iniciamente sobre o primeiro modo, a construção de templates no Visual Studio 2005.
1. Construção de templates de projeto e templates de itens de projeto
A construção de templates é feita através da funcionalidade "Export Template" do Visual Studio. Esse recurso permite a geração de um pacote .ZIP, que agrupa arquivos de recursos, fontes, imagens e links de referência de um projeto ou arquivo fonte, que poderá ser reutilizado pelos desenvolvedores de forma integrada ao Visual Studio.
Você encontra esse recurso no menu File do IDE do Visual Studio, veja:
A partir de um projeto modelo selecionado, é possível criar um template de projeto ou de item, como mostrado na caixa de diálogo abaixo:
Para o exemplo de geração de um template de projeto, é gerado um arquivo .ZIP, contendo os arquivos de recursos e fontes componentes do projeto. Também é adicionado a esse pacote o arquivo com as referências e lista de componentes do template. Esse arquivo vem com extensão ".vstemplate". Veja o conteúdo de um pacote de template aqui:
Um exemplo desse arquivo ".vstemplate" é dado a abaixo:
<VSTemplate Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project"> <TemplateData> <Name>ConsoleAppDemo - Lab</Name> <Description>ConsoleAppDemo - Lab</Description> <ProjectType>CSharp</ProjectType> <ProjectSubType> </ProjectSubType> <SortOrder>1000</SortOrder> <CreateNewFolder>true</CreateNewFolder> <DefaultName>ConsoleAppDemo - Lab</DefaultName> <ProvideDefaultName>true</ProvideDefaultName> <LocationField>Enabled</LocationField> <EnableLocationBrowseButton>true</EnableLocationBrowseButton> <Icon>__TemplateIcon.ico</Icon> </TemplateData> <TemplateContent> <Project TargetFileName="ConsoleAppDemo1.csproj" File="ConsoleAppDemo1.csproj" ReplaceParameters="true"> <ProjectItem ReplaceParameters="true" TargetFileName="Program.cs">Program.cs</ProjectItem> <Folder Name="Properties" TargetFolderName="Properties"> <ProjectItem ReplaceParameters="true" TargetFileName="AssemblyInfo.cs">AssemblyInfo.cs</ProjectItem> </Folder> </Project> </TemplateContent> </VSTemplate>
No template acima, temos um padrão de projeto baseado no arquivo ConsoleAppDemo1.csproj, que foi o projeto base a partir do qual geramos o template. Isso aparece no tag <TemplateContent>.
Outros exemplos de arquivos de template podem agrupar soluções com vários projetos, como vemos a seguir:
<?xml version="1.0" encoding="utf-8" ?> <VSTemplate Version="2.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="ProjectGroup"> <TemplateData> <DefaultName>Template Solution Test - ClassLibraries 1 e 2</DefaultName> <Name>Template Solution Test - ClassLibraries 1 e 2</Name> <Description>Template Solution Test - ClassLibraries 1 e 2</Description> <Icon>Default.ico</Icon> <ProjectType>CSharp</ProjectType> <CreateNewFolder>false</CreateNewFolder> <DefaultName></DefaultName> <ProvideDefaultName>false</ProvideDefaultName> </TemplateData> <TemplateContent> <ProjectCollection> <ProjectTemplateLink ProjectName="ClassLibrary1"> .\ClassLibrary1\ClassLibrary1.vstemplate </ProjectTemplateLink> <ProjectTemplateLink ProjectName="ClassLibrary2"> .\ClassLibrary2\ClassLibrary2.vstemplate </ProjectTemplateLink> </ProjectCollection> </TemplateContent> </VSTemplate>
No exemplo acima, note que o tag <TemplateContent> contém agora o tag <ProjectCollection>, onde encontramos a referência para dois templates de projetos previamente gerados:
<ProjectTemplateLink ProjectName="ClassLibrary1"> .\ClassLibrary1\ClassLibrary1.vstemplate </ProjectTemplateLink>
<ProjectTemplateLink ProjectName="ClassLibrary2"> .\ClassLibrary2\ClassLibrary2.vstemplate </ProjectTemplateLink>
Assim, criando os templates de projetos individuais, podemos gerar um template de solução, que agrupa vários projetos, para customizações mais completas. O pacote .zip final com o template gerado é colocado na pasta:
"C:\Documents and Settings\user\My Documents\Visual Studio 2005\My Exported Templates"
Mas ainda é possível criar novas pastas, agrupando templates por projetos, departamentos, funcionalidades, etc. No momento da criação de uma nova solução ou projeto, os templates previamente gerados são oferecidos ao desenvolvedor, que agora não inicia o desenvolvimento do zero. Até aqui, falamos de templates de projetos, mas o mesmo mecanismo funciona para templates de arquivos ou recursos individuais de um projeto, chamados de Item Template.
Uma boa referência sobre a criação de templates você encontra aqui, com uma série de links sobre os tags e funcionalidades dos arquivos ".vstemplates":
Create Reusable Project And Item Templates For Your Development Team http://msdn.microsoft.com/msdnmag/issues/06/01/codetemplates/default.aspx
No próximo post, vamos falar das customizações sobre o SDK v4.0 do Visual Studio 2005.
Por enquanto é só! Até o próximo post :)
Waldemir.
PingBack from http://msdnrss.thecoderblogs.com/2008/01/15/project-template-e-item-template-customizacoes-no-ambiente-de-desenvolvimento/
Bom dia.
Tenho uma duvida sobre este post.
Eu tentei aplicar o que foi mostrado aqui.
Fiz o seguinte.
Criei um novo projeto do tipo Console Application
Ai fui até o menu File e a opção de exportar não aparece, meu visual studio é a versão professional.
Gostaria de saber se estou errando em algo?
Você poderia me ajudar?
Desde já muito obrigado.
Olá Rafael, tudo certo?
Obrigado pelos comentários no blog.
De fato, parece ser apena uma questão de configuração de opções no menu "File".
Fiz uma nova instalação do meu Visual Studio Team Suite 2005 e tive o mesmo comportamento, ou seja, para um novo projeto Console Application, após o build, não visualizei o menu File/Export Template.
Para recuperar esse menu, faça o seguinte:
1. Verifique se o V2005 está com SP1;
2. Verifique se o .NET 2.0 está com SP2;
3. Ir para o menu Tools >> Customize >> Commands tab;
4. Selecionar a opção "File" sobre as categorias a esquerda;
5. Clicar em "Rearrange commands";
6. Na janela "Rearrange commands", conferir que o menu bar selecionado seja "File", na parte superior da janela e clicar em "Add";
7. Na janela "Add Command", selecionar "File" no painel da esquerda e "Export Template" no painel da direita. Pronto!
Ao fechar essas janelas, volte ao menu File e você verá a opção "Export Template".
E bons templates para você :)
Um abraço!
Olá.
Cheguei nesse site procurando por maneiras de criar template para o VS 2005. Tenho um template que baixei do endereço: http://download.microsoft.com/download/f/2/7/f279e71e-efb0-4155-873d-5554a0608523/VBFusion05.exe, mas está em VB.NET. Gostaria de fazer uma versão em C#. É possível fazer uma reversa do template?
Obrigado!
Olá Marcos, tudo certo?
Pense que o template é formato por dois tipos de arquivos: o .vstemplate, que descreve os componentes de software do template e o arquivos do projeto, que formam o projeto mesmo, seja em VB.NET ou CS.
Você pode manualmente alterar os componentes descritos no arquivo .vstemplate, atualizando ou modificando a composição de arquivos do template.
Mas para converter o projeto interno do template, você vai precisar usar uma ferramenta de conversão, fora do template. Existem algumas no mercado, como a http://www.vbconversions.net/.
Assim, obtenha os vários exemplos de projeto exportados em VB.NET a partir do template, converta-os para CSharp manualmente ou com alguma ferramenta e na sequência, crie novos templates você mesmo, para seus futuros projetos em CSharp.
Parece divertido :)