Criando templates no Visual Studio
04/06/2021
Pedro Pagotto

O nosso dia a dia como dev é uma grande correria pingando de um projeto para outro, e com isso vem as copias de estruturas e de códigos existente para criar uma nova funcionalidade, basicamente copiamos o esqueleto de arquivos e depois renomearmos para ai começar a desenvolver o que realmente importa, isso é tão natural e também muito repetitivo.

Seria uma maravilha se simplesmente apenas com um clique no menu New Item e a escolha de um arquivo o nosso amigo vs2019 criasse toda a estrutura para nós.

Então comemore pois esse dia chegou, neste artigo vou te ensinar como você pode melhorar a produtividade do seu dia a dia, fazendo você deixar de copiar e colar código e criar templates de projeto para facilitar o desenvolvimento de novas funcionalidades.

Mão na massa:

Basicamente estaremos criando um simples template um serviço onde será criado a partir de uma ção do vs2019 os arquivos:

  • Interface (onde fica declarado a assinatura do metodo)
  • Classe de Request (basicamente é o objeto que será enviado para este serviço)
  • Classe de implementação (Onde será implementada a interface criada enviando como parametro o request).

É algo bem proximo do recurso de scaffold no ASPNET CORE MVC onde é gerado os controllers com as ações de forma atomatica.

Primeiro passo:

Crie um projeto do tipo Console Application para ficar mais fácil de criarmos os arquivos que envolvem a nossa automação de template.

Vou criar o projeto via vs2019, porem nada impede de ser criado via dotnet CLI.

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled.png

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%201.png

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%202.png

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%203.png

Após o projeto estar criado, iremos realizar a seguinte ação:

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%204.png

Crie uma pasta chamada Template e dentro desta Pasta uma interface chamada IRepository

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%205.png

crie uma interface:

  • Interface (pode chama-la como quiser)

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%206.png

No meu caso vou montar esta estrutura:

  • IServiceTemplate.cs (interface)

Ficou desta forma:

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%207.png

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%208.png

logo após criar toda a estrutura realize a exportação como template:

navegue até a aba Project→ Export Template:

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%209.png

selecione a opção de Item Template

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2010.png

no caso selecione a interface:

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2011.png

caso queira pode selecionar algumas dependências, pois com isso o arquivo gerado via template já vem com essas importações por exemplo System.Linq.

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2012.png

Realize o preenchimento do nome do seu template e da descrição do mesmo.

No caso existe a possibilidade de colocar um icon customizado, eu não vou colocar pois não é obrigatório, mais você pode colocar o logo da empresa ou do projeto para que se destina este template.

logo após click em Finish

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2013.png

Será aberto uma pasta com um template zip conforme abaixo, realize a copia deste template para outro diretorio onde seja possivel abri-lo no VSCode ou outro editor de sua preferencia:

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2014.png

realize a extração da pasta e abra no vscode, note que foi gerado 3 arquivos:

  • Icon (que será exibido no vs2019)
  • Classe de template
  • Arquivo de configuração do .vstemplate

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2015.png

Agora como o nosso template tem 3 arquivos iremos editar manualmente o vstemplate para aceitar os demais arquivos.

O arquivo padrão de configuração está desta forma:

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2016.png

Vamos editar para esse modelo:

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2017.png

note que existe uma variavel chamada \(fileinputname\), que corresponde ao nome do arquivo digitado na criação via vs2019.

Note que você pode definir padrões de nomes de arquivos com prefixo e sufixo, tudo vai de acordo com o padrão do seu projeto.

Logo após adicionar essas linhas de configuração no VSCODE crie os metodos padrões da sua interface como por exemplo o metodo abaixo:

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2018.png

Criei um metodo chamado EXECUTE onde receberá um Servicerequest que será criado via template.

Crie um arquivo chamado ServiceTemplateRequest.cs (pode ser o nome que você desejar) e crie o seguinte codigo dentro deste arquivo:

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2019.png

Essa classe será a classe de request que será passada como parâmetro para o nosso método e para nossa interface.

Na sequencia crie um arquivo chamado ServiceTemplate.cs (pode ser o nome que você desejar), dentro desse arquivo será realizado a implementação da nossa interface conforme o exemplo abaixo:

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2020.png

no caso foi realizado a implementação da interface em conjunto com o metodo Execute que criamos anteriormente.

Após finalizar as configurações e implementações destes arquivos, agora vamos importar esse template dentro do vs2019:

Primeiramente realize o zip desses arquivos, desta forma:

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2021.png

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2022.png

O seu arquivo .zip deverá conter somente os arquivos de template conforme a print abaixo:

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2023.png

Agora dentro do vs2019 navegue até o caminho :

Tools→ Options

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2024.png

Pesquise pela palavra Locations, entre no menu Projects and Solutions, copie o caminho presente no passo 2

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2025.png

abra esse caminho via executar (Tecla Windows + R)

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2026.png

Caso já exista algum zip com o mesmo nome devido ao processo de exportação realizado anteriormente, realize a exclusão do arquivo existente e cole o arquivo que você acabou de gerar o zip.

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2027.png

Caso você queira manter os templates de forma organizada, você pode movimentar para a pasta Visual C# ou para as demais linguagens de sua preferência.

Agora feche o seu vs2019.

Abra novamente no projeto de console

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2028.png

Agora vamos testar o template, crie uma nova pasta chamada TemplateTest, para que possamos criar os arquivos dentro dela.

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2029.png

Logo na sequencia vá ate o menu Add → New Item

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2030.png

Note que o template criado já esta em primeiro, porem caso não esteja pesquise pelo nome na barra de pesquisa do lado direito.

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2031.png

Selecione o template e coloque o nome que desejar, eu vou criar por exemplo um serviço de CEP

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2032.png

Note que nao preciso colocar a extensão '.cs' e nem o prefixo ou sufixo de Service etc..

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2033.png

Note que a estrutura padrão de um Service foi criada com sucesso, agora basta você implementar a sua logica, sem se preocupar em copiar arquivos e estruturas de outros lugares.

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2034.png

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2035.png

https://baltaio.blob.core.windows.net/static/content/articles/https://raw.githubusercontent.com/balta-io/blog/main/criando-templates-visual-studio/images/criando-templates-visual-studio/criando-templates-visual-studio/Untitled%2036.png

Espero que tenha gostado desta dica, acredito que os templates vieram para agregar em nossas vidas, para focarmos no que realmente importa que é gerar valor para o nosso cliente/negocio.

Até a próxima!

Conheça o autor

Pedro Pagotto

Desenvolvedor

I`m in the software development market since 2014 working with the .NET platform for backend, I have advanced knowledge in programming logic, object oriented programming, programming architeture, optimization of algorithms and structuring and restructuring of codes.

An unhandled error has occurred. Reload 🗙