DEV Community

Vinícius Beloni
Vinícius Beloni

Posted on • Updated on

[Simples] Criando templates customizados em C#

"Sejam bondosos e compassivos uns para com os outros, perdoando-se mutualmente, assim como Deus os perdoou em Cristo."
Efésios 4.32

Provavelmente você já viu ou utilizou o comando dotnet new para criar projetos usando o novo .NET, então vou te mostrar como criar seu próprio template customizado!

Pré-requisitos (para este tutorial):

Vou criar o template de um projeto Web API, mas podemos criar templates de arquivos ou até estruturas completas com Dockerfile, .editorconfig, .sln, estruturas de pastas e etc, tudo depende da sua necessidade (ou criatividade). Mas para este tutorial faremos da forma mais simples e útil para este momento, então vamos prosseguir.

Com o terminal do VSCode aberto, vamos criar um projeto do tipo Web API, customizar e remover o que for desnecessário.

> dotnet new webapi --no-https -n MyProject -o src
> ri src/WeatherForecast.cs
> ren src/Controllers/WeatherForecastController.cs MyController.cs
Enter fullscreen mode Exit fullscreen mode

Faremos algumas alterações no arquivo MyController.cs (caso seja iniciante não copie o código, mas escreva linha por linha).

using Microsoft.AspNetCore.Mvc;

// MyProject será substituido pelo nome do projeto ao criar o template
namespace MyProject.Controllers;

[ApiController]
[Route("[controller]")]
// WeatherForecast foi renomeado para My
public class MyController : ControllerBase
{
    private readonly ILogger<MyController> _logger;

    public MyController(ILogger<MyController> logger)
    {
        _logger = logger;
    }

    [HttpGet()]
    public string Get()
    {
        _logger.LogInformation("Hello World");
        return "Olá Mundo";
    }

    [HttpPost()]
    public void Post([FromBody] object body)
    {
        _logger.LogInformation($"received {body}");
    }
}
Enter fullscreen mode Exit fullscreen mode

Agora vamos rodar para ver se está tudo certo:

> dotnet run --project src
Building...
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://localhost:5172
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: C:\repos\criando-template\src\
Enter fullscreen mode Exit fullscreen mode

Eu utilizo uma extensão chamada REST Client para fazer as requisições usando o próprio VSCode para testar coisas mais rapidamente, mas você pode utilizar o Postman se preferir ou o próprio navegador no caso do método GET. Para não confundir ninguém vou mostrar o resultado do meu terminal ao fazer as requisições.

info: MyProject.Controllers.MyController[0]
      Hello World
info: MyProject.Controllers.MyController[0]
      received { "confia": "no Pai" }
Enter fullscreen mode Exit fullscreen mode

Agora com a nossa Web API customizada, vamos configurar o nosso template:

> mkdir ./src/.template.config
> '' > ./src/.template.config/template.json
Enter fullscreen mode Exit fullscreen mode

Conteúdo do arquivo template.json:

{
    "$schema": "http://json.schemastore.org/template",
    "author": "@confianodev",
    "identity": "My Web Api",
    "name": "My Web Api",
    "shortName": "myapi",
    "preferNameDirectory": false,
    "sourceName": "MyProject",
    "classifications": ["Web API", "API"],
    "tags": {
        "language": "C#",
        "type": "project"
    }
}
Enter fullscreen mode Exit fullscreen mode

Vou dar uma breve explicação de alguns desses campos, lembrando que podemos adaptar essas informações:

author - Nome de quem tem a propriedade intelectual deste template(você, a empresa, uma organização).

shortName - O nome que será utilizado no comando, exemplo: dotnet new myapi

preferNameDirectory - Caso seja true será gerado o projeto dentro de uma pasta com o nome informado(dotnet new myapi -n EsseNome) caso seja false não cria pasta nenhuma.

sourceName - Muito importante pois é a palavra-chave que vai substituir arquivos, namespace, textos, etc, ao criar um novo projeto usando o seu template (dotnet new myapi -n PalavraChave).

tags - Utilizado para informar qual o tipo do template e quais linguagens são suportadas(podemos criar em F# também)

Para mais informações pode acessar este link.

Finalmente, vamos instalar nosso template, criar um projeto e testá-lo:

> dotnet new -i .
> dotnet new myapi -n Oloko -o sample
> dotnet run --project sample/
Building...
info: Microsoft.Hosting.Lifetime[14]
      Now listening on: http://localhost:5172
info: Microsoft.Hosting.Lifetime[0]
      Application started. Press Ctrl+C to shut down.
info: Microsoft.Hosting.Lifetime[0]
      Hosting environment: Development
info: Microsoft.Hosting.Lifetime[0]
      Content root path: C:\repos\criando-template\sample\
Enter fullscreen mode Exit fullscreen mode

E está pronto o nosso template. Lembrando que a ideia do template é facilitar a criação de novos projetos e novos arquivos, então crie da maneira que for mais útil para o seu dia-a-dia.

Caso queria desinstalar basta utilizar o comando:

> dotnet new --uninstall .
Enter fullscreen mode Exit fullscreen mode

Claro que este é o jeito mais simples de fazer um template, no próximo Post vou mostrar como criar uma solução completa, com dois projetos e uma solução, com Dockerfile, padronização de código e etc, utilizando o github actions para publicar como pacote Nuget.

Fico muito agradecido de ter compartilhado este conhecimento com você, se tiver alguma dúvida deixe nos comentários.

Acesse meu canal no YouTube clicando aqui
E caso queria ir para o post mais avançado, clique aqui

Abraços e até a próxima!

Fontes:

Donovan Brown: Custom Templates for dotnet new
How to create your own templates
Templating Wiki

Top comments (0)