Monorepositorio con C#: organización de código para proyectos .NET

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Monorepositorio con C#: organización del código y mejores prácticas



En el desarrollo moderno con C# (.NET), el enfoque de monorepositorio (monorepo) se utiliza cada vez más. A diferencia de los multirepositorios, donde cada proyecto vive en su propio repositorio Git, un monorepositorio almacena todo el código de la empresa o producto en un único repositorio central. Para los desarrolladores de .NET, esto significa una única solución (solution), bibliotecas compartidas y una configuración simplificada de CI/CD. En este artículo, analizaremos cómo organizar correctamente un monorepositorio con C#, proporcionaremos ejemplos de código y discutiremos las ventajas clave.



1. Ventajas del monorepositorio para .NET



El monorepositorio es especialmente útil para equipos que trabajan en varios proyectos .NET relacionados: microservicios, aplicaciones web, bibliotecas de clases. Las principales ventajas son:

  • Versión única de dependencias — todos los proyectos utilizan las mismas versiones de paquetes NuGet, lo que elimina conflictos.
  • Refactorización simplificada — un cambio en una interfaz común o modelo de datos se aplica inmediatamente a todos los consumidores.
  • Historial Git compartido — los commits atómicos que afectan a varios proyectos son visibles en un solo lugar.
  • CI/CD centralizado — un único pipeline para compilar, probar y desplegar todos los componentes.


Para C#, el monorepositorio se construye alrededor de un único archivo .sln (solution) que hace referencia a todos los proyectos. Esto permite utilizar las herramientas integradas de Visual Studio y .NET CLI para gestionar dependencias.



2. Estructura del monorepositorio para C#



Consideremos una estructura típica de monorepositorio para una solución .NET. Podría verse así:



MyCompany/├── src/│   ├── MyCompany.Common/          # Biblioteca común│   │   ├── MyCompany.Common.csproj│   │   └── ...│   ├── MyCompany.WebApi/          # Web API│   │   ├── MyCompany.WebApi.csproj│   │   └── ...│   └── MyCompany.BackgroundJob/   # Servicio en segundo plano│       ├── MyCompany.BackgroundJob.csproj│       └── ...├── tests/│   ├── MyCompany.Common.Tests/│   ├── MyCompany.WebApi.Tests/│   └── MyCompany.BackgroundJob.Tests/├── docs/                         # Documentación├── scripts/                      # Scripts para CI/CD├── .gitignore└── MyCompany.sln                 # Solución única


Elementos clave de esta estructura:

  • src/ — carpeta con el código fuente. Cada proyecto es una carpeta separada con su propio archivo .csproj.
  • tests/ — carpeta con pruebas. Los nombres de los proyectos de prueba repiten los nombres de los principales con el sufijo .Tests.
  • docs/ — documentación (README, decisiones arquitectónicas).
  • scripts/ — scripts para automatizar la compilación o el despliegue.
  • MyCompany.sln — archivo de solución único que incluye todos los proyectos.


Esta estructura simplifica la navegación y permite agregar fácilmente nuevos proyectos sin cambiar la configuración raíz.



3. Configuración de la solución única y dependencias comunes



Para crear un monorepositorio en .NET, use el comando dotnet new sln y luego agregue proyectos:



# Crear la carpeta raíz y navegar a ellamkdir MyCompany && cd MyCompany

# Crear un archivo de solución vacíodotnet new sln -n MyCompany

# Crear la estructura de carpetasmkdir src tests docs scripts

# Crear proyectosdotnet 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

# Agregar proyectos a la solucióndotnet sln add src/MyCompany.Common/MyCompany.Common.csprojdotnet sln add src/MyCompany.WebApi/MyCompany.WebApi.csprojdotnet sln add src/MyCompany.BackgroundJob/MyCompany.BackgroundJob.csproj


Ahora agreguemos una referencia a la biblioteca común desde la Web API:

Blogs

Book Recommendations