# Configurar el directorio base donde están los proyectos
$BaseDir = "C:\Ruta\A\Proyectos"
# Ruta al ejecutable de Visual Studio 2019 (ajustar si está en otro directorio)
$VSPath = "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\devenv.com"
# Archivo CSV de salida
$OutputCSV = "C:\Ruta\De\Salida\metricas.csv"
# Encabezados del CSV
"Project, MaintainabilityIndex, CyclomaticComplexity, DepthOfInheritance, ClassCoupling, LinesOfCode" | Out-File -FilePath $OutputCSV
# Buscar todos los archivos .csproj en el directorio y subdirectorios
$Projects = Get-ChildItem -Path $BaseDir -Recurse -Filter "*.csproj"
# Procesar cada proyecto
foreach ($Project in $Projects) {
$ProjectPath = $Project.FullName
$SolutionDir = Split-Path -Path $ProjectPath -Parent
# Ejecutar análisis de métricas en el proyecto
$MetricsOutput = & "$VSPath" "$ProjectPath" /Clean /Rebuild /ProjectMetrics
# Extraer los valores de métricas del output
if ($MetricsOutput -match "Maintainability Index:\s+(\d+).*Cyclomatic Complexity:\s+(\d+).*Depth of Inheritance:\s+(\d+).*Class Coupling:\s+(\d+).*Lines of Code:\s+(\d+)") {
$MaintainabilityIndex = $matches[1]
$CyclomaticComplexity = $matches[2]
$DepthOfInheritance = $matches[3]
$ClassCoupling = $matches[4]
$LinesOfCode = $matches[5]
# Guardar resultados en CSV
"$($Project.Name),$MaintainabilityIndex,$CyclomaticComplexity,$DepthOfInheritance,$ClassCoupling,$LinesOfCode" | Out-File -FilePath $OutputCSV -Append
}
}
Write-Host "Métricas generadas y guardadas en: $OutputCSV"