Monorepositório com C#: organização de código para iniciantes
No desenvolvimento moderno com C# (.NET), mais cedo ou mais tarde surge a pergunta: como organizar o código quando você tem vários projetos — uma biblioteca de classes, uma Web API, um aplicativo de console, testes? Muitos desenvolvedores iniciantes criam repositórios separados para cada parte, o que gera confusão com versões e dependências. A alternativa é o monorepositório (monorepo). Neste artigo, vamos explorar o que é um monorepositório, como configurá-lo em C# e por que ele simplifica a vida dos iniciantes.
O que é um monorepositório?
Um monorepositório é uma abordagem onde todo o código de vários projetos relacionados é armazenado em um único repositório Git. Por exemplo, você pode ter uma biblioteca compartilhada MyApp.Shared, um aplicativo web MyApp.Web e uma ferramenta de console MyApp.Cli — tudo em uma única pasta, com um único arquivo .sln.
No contexto do C# (.NET), um monorepositório geralmente significa uma única Solution do Visual Studio contendo vários projetos. Isso é especialmente útil para:
- Compartilhamento de código (através de Project References, em vez de pacotes NuGet).
- Um processo unificado de build e CI/CD.
- Simplificação do gerenciamento de versões (um branch — todas as alterações de uma vez).
Vantagens do monorepositório para iniciantes
Se você está começando a aprender C#, o monorepositório ajuda a evitar erros comuns:
- Simplicidade de navegação — todos os projetos em um só lugar, sem necessidade de alternar entre repositórios.
- Conexão instantânea — uma alteração na biblioteca é imediatamente visível nos projetos dependentes.
- Estilo unificado — você pode configurar um único
.editorconfigouDirectory.Build.propspara todos os projetos. - Facilidade para executar testes — com um único comando
dotnet test, toda a solução é verificada.
Criando a estrutura do monorepositório: guia passo a passo
Passo 1. Criar a pasta raiz e a solução
Abra o terminal e execute:
mkdir MyMonorepocd MyMonorepodotnet new sln -n MyAppAgora você tem o arquivo MyApp.sln — o ponto de entrada para o Visual Studio ou Rider.
Passo 2. Adicionar os projetos
Vamos criar três projetos: uma biblioteca de classes, uma Web API e um aplicativo de console. Para organização, vamos colocá-los em uma subpasta src:
mkdir srccd srcdotnet new classlib -n MyApp.Shareddotnet new webapi -n MyApp.Webdotnet new console -n MyApp.Clicd ..Agora, vamos vinculá-los à solução:
dotnet sln add src/MyApp.Shared/MyApp.Shared.csprojdotnet sln add src/MyApp.Web/MyApp.Web.csprojdotnet sln add src/MyApp.Cli/MyApp.Cli.csprojPasso 3. Configurar dependências entre projetos
Suponha que MyApp.Web e MyApp.Cli usem classes de MyApp.Shared. Em vez de publicar a biblioteca no NuGet, basta adicionar uma Project Reference:
dotnet add src/MyApp.Web/MyApp.Web.csproj reference src/MyApp.Shared/MyApp.Shared.csprojdotnet add src/MyApp.Cli/MyApp.Cli.csproj reference src/MyApp.Shared/MyApp.Shared.csprojAgora, no arquivo MyApp.Web.csproj, aparecerá a seção:
<ItemGroup> <ProjectReference Include="..\\MyApp.Shared\\MyApp.Shared.csproj" /></ItemGroup>Passo 4. Escrever código compartilhado
No projeto MyApp.Shared, vamos criar uma classe simples:
// src/MyApp.Shared/GreetingService.csnamespace MyApp.Shared;
public class GreetingService{ public string GetGreeting(string name) => $"Olá, {name}! Bem-vindo ao monorepositório.";}Agora, vamos usá-la no aplicativo de console:
// src/MyApp.Cli/Program.csusing MyApp.Shared;