Monorepositório com C#: organização de código para projetos .NET

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Monorepositório com C#: organização de código e melhores práticas



No desenvolvimento moderno em C# (.NET), a abordagem de monorepositório (monorepo) é cada vez mais utilizada. Ao contrário dos multirrepositórios, onde cada projeto vive no seu próprio repositório Git, um monorepositório armazena todo o código da empresa ou produto em um único repositório central. Para desenvolvedores .NET, isso significa uma única solução (solution), bibliotecas compartilhadas e configuração simplificada de CI/CD. Neste artigo, vamos analisar como organizar corretamente um monorepositório com C#, fornecer exemplos de código e discutir as principais vantagens.



1. Vantagens do monorepositório para .NET



O monorepositório é especialmente útil para equipes que trabalham em vários projetos .NET relacionados: microsserviços, aplicações web, bibliotecas de classes. Os principais benefícios são:

  • Versão única de dependências — todos os projetos usam as mesmas versões de pacotes NuGet, eliminando conflitos.
  • Refatoração simplificada — a alteração de uma interface comum ou modelo de dados é aplicada imediatamente a todos os consumidores.
  • Histórico Git compartilhado — commits atômicos que afetam vários projetos são visíveis em um só lugar.
  • CI/CD centralizado — um único pipeline para compilação, teste e implantação de todos os componentes.


Para C#, o monorepositório é construído em torno de um único arquivo .sln (solution), que referencia todos os projetos. Isso permite usar as ferramentas integradas do Visual Studio e .NET CLI para gerenciar dependências.



2. Estrutura do monorepositório para C#



Vamos considerar uma estrutura típica de monorepositório para uma solução .NET. Ela pode ser assim:



MyCompany/├── src/│   ├── MyCompany.Common/          # Biblioteca compartilhada│   │   ├── MyCompany.Common.csproj│   │   └── ...│   ├── MyCompany.WebApi/          # Web API│   │   ├── MyCompany.WebApi.csproj│   │   └── ...│   └── MyCompany.BackgroundJob/   # Serviço em segundo plano│       ├── MyCompany.BackgroundJob.csproj│       └── ...├── tests/│   ├── MyCompany.Common.Tests/│   ├── MyCompany.WebApi.Tests/│   └── MyCompany.BackgroundJob.Tests/├── docs/                         # Documentação├── scripts/                      # Scripts para CI/CD├── .gitignore└── MyCompany.sln                 # Solução única


Elementos-chave desta estrutura:

  • src/ — pasta com o código-fonte. Cada projeto é uma pasta separada com seu próprio arquivo .csproj.
  • tests/ — pasta com testes. Os nomes dos projetos de teste repetem os nomes dos principais com o sufixo .Tests.
  • docs/ — documentação (README, decisões arquiteturais).
  • scripts/ — scripts para automação de compilação ou implantação.
  • MyCompany.sln — arquivo de solução único que inclui todos os projetos.


Essa estrutura simplifica a navegação e permite adicionar facilmente novos projetos sem alterar a configuração raiz.



3. Configuração da solução única e dependências compartilhadas



Para criar um monorepositório em .NET, use o comando dotnet new sln e, em seguida, adicione os projetos:



# Cria a pasta raiz e navega para elamkdir MyCompany && cd MyCompany

# Cria um arquivo de solução vaziodotnet new sln -n MyCompany

# Cria a estrutura de pastasmkdir src tests docs scripts

# Cria os projetosdotnet new classlib -n MyCompany.Common -o src/MyCompany.Commondotnet new webapi -n MyCompany.WebApi -o src/MyCompany.WebApidotnet new console -n MyCompany.BackgroundJob -o src/MyCompany.BackgroundJob

# Adiciona os projetos à soluçãodotnet sln add src/MyCompany.Common/MyCompany.Common.csprojdotnet sln add src/MyCompany.WebApi/MyCompany.WebApi.csprojdotnet sln add src/MyCompany.BackgroundJob/MyCompany.BackgroundJob.csproj


Agora vamos adicionar uma referência à biblioteca compartilhada a partir da Web API:

Blogs

Book Recommendations