> ## Content Index
> Fetch the complete content index at: https://www.azurebrasil.cloud/llms.txt
> Use this file to discover other available public pages before exploring further.

# Criando templates customizados de aplicações .NET
- URL: https://www.azurebrasil.cloud/blog/criando-templates-customizados-de-aplicacoes-net/
- Published: 2024-09-17T13:00:36.000Z
- Updated: 2024-09-17T13:00:36.000Z
- Author: Talles Valiatti

Criar [*templates* em .NET](https://learn.microsoft.com/pt-br/dotnet/core/tools/custom-templates?ref=azurebrasil.cloud) é uma prática essencial para desenvolvedores que desejam reaproveitar estruturas de projetos, manter padrões organizacionais e agilizar a criação de novas aplicações. Utilizar *templates* permite a uniformidade entre diferentes projetos, garantindo que todos sigam as mesmas convenções de codificação, estrutura de pastas, bibliotecas e configurações. Isso não apenas economiza tempo, como também reduz a margem de erros e facilita a manutenção de projetos ao longo do tempo.

Neste exemplo, vamos criar um *template* de um projeto .NET, instalá-lo, e depois utilizá-lo para criar outros projetos baseados nesse template. Acompanhe o passo a passo para entender como esse processo funciona.

Vamos criar um diretório raiz:

```bash
mkdir DotNetTemplates
```

Dentro da pasta raiz, criaremos outro diretório específico para o nosso projeto base:

```bash
mkdir MyTemplate
```

Agora, adicionamos um arquivo `.`[gitignore](https://git-scm.com/docs/gitignore/en?ref=azurebrasil.cloud) para evitar o versionamento de arquivos desnecessários:

```bash
dotnet new gitignore
```

Vamos inicializar o repositório Git para o nosso *template*:

```bash
git init
```

O próximo passo é criar uma [Web API](https://learn.microsoft.com/pt-br/aspnet/core/tutorials/first-web-api?view=aspnetcore-8.0&tabs=visual-studio&ref=azurebrasil.cloud):

```bash
dotnet new webapi
```

Vamos adicionar uma classe `Book` dentro do *namespace* `MyTemplate.Models` para fins de exemplo:

```csharp
namespace MyTemplate.Models;

public class Book
{
}
```

Precisamos de um diretório de configuração para o nosso *template*. Vamos criá-lo agora:

```bash
mkdir .template.config
```

O arquivo `template.json` é crucial para definir as configurações do *template*. Vamos criar o arquivo com o seguinte conteúdo:

```json
{
    "$schema": "http://json.schemastore.org/template",
    "author": "Talles Valiatti",
    "classifications": [ "Web", "WebAPI", "C#"],
    "identity": "my-template-web-api",
    "name": "My web api template",
    "shortName": "my-template",
    "tags": {
      "language": "C#",
      "type": "project"
    },
    "symbols": {
      "ProjectName": {
          "type": "parameter",
          "datatype": "string",
          "description": "Rename namespaces",
          "replaces": "MyTemplate",
          "FileRename": "MyTemplate",
          "defaultValue": "MyTemplate"
      }
    },
    "sources": [
      {
        "modifiers": [
          {
            "exclude": ["**/.git/**"]
          }
        ]
      }
    ]
}
```

<observe que>

Observações Importantes:

- **Nome do Autor**: Definimos o nome do autor do *template*;
- **Classificações e Tags**: Definimos o nome do *template*, a linguagem (C#), e as categorias (Web, WebAPI);
- **Parâmetro `ProjectName`**: adicionamos um parâmetro `ProjectName` que substitui todos os valores "*MyTemplate*" pelo valor fornecido, tanto no conteúdo dos arquivos quanto no nome dos mesmos;
- **Exclusão de `.git`**: O diretório `.git` não será levado para os novos projetos criados com o *template*.

![](https://storage.ghost.io/c/00/52/0052dced-0017-4d07-b190-1f5c48e0ab59/content/images/2024/09/Screen-Shot-2024-09-11-at-23.54.00.png)

Com tudo configurado, vamos instalar o *template* por meio do comando abaixo:

```bash
dotnet new install . 
```

Podemos verificar se o novo *template* foi instalado com sucesso listando os *templates* disponíveis:

```bash
dotnet new --list
```

![](https://storage.ghost.io/c/00/52/0052dced-0017-4d07-b190-1f5c48e0ab59/content/images/2024/09/Screen-Shot-2024-09-11-at-23.30.39.png)

Já podemos criar outros projetos com base nesse *template*. Dentro da pasta raiz, vamos criar um novo diretório:

```bash
mkdir ProjectOne
```

Agora, vamos criar um novo projeto com base no *template* que criamos anteriormente, utilizando `--ProjectName ProjectOne` como parâmetro:

```bash
 dotnet new my-template --ProjectName ProjectOne
```

Observe que o novo projeto foi criado com sucesso, e como esperado, o diretório `.git` não foi incluído no novo projeto.

![](https://storage.ghost.io/c/00/52/0052dced-0017-4d07-b190-1f5c48e0ab59/content/images/2024/09/Screen-Shot-2024-09-11-at-23.41.41.png)

![](https://storage.ghost.io/c/00/52/0052dced-0017-4d07-b190-1f5c48e0ab59/content/images/2024/09/Screen-Shot-2024-09-11-at-23.38.42.png)

Você já pode baixar o projeto por esse [link](https://github.com/TallesValiatti/DotNetTemplates?ref=azurebrasil.cloud), e não esquece de me seguir no [LinkedIn](https://www.linkedin.com/in/tallesvaliatti/?ref=azurebrasil.cloud)!

Até a próxima, abraços!