56 lines
1.3 KiB
PowerShell
56 lines
1.3 KiB
PowerShell
#!/usr/bin/env pwsh
|
|
# fix-duplicate-projects.ps1 - Remove duplicate project entries from solution file
|
|
|
|
param(
|
|
[string]$SlnPath = "src/StellaOps.sln"
|
|
)
|
|
|
|
$content = Get-Content $SlnPath -Raw
|
|
$lines = $content -split "`r?`n"
|
|
|
|
$projectNames = @{}
|
|
$duplicateGuids = @()
|
|
$newLines = @()
|
|
$skipNextEndProject = $false
|
|
|
|
foreach ($line in $lines) {
|
|
if ($skipNextEndProject -and $line -eq "EndProject") {
|
|
$skipNextEndProject = $false
|
|
continue
|
|
}
|
|
|
|
if ($line -match 'Project\(.+\) = "([^"]+)",.*\{([A-F0-9-]+)\}"?$') {
|
|
$name = $Matches[1]
|
|
$guid = $Matches[2]
|
|
|
|
if ($projectNames.ContainsKey($name)) {
|
|
$duplicateGuids += $guid
|
|
Write-Host "Removing duplicate: $name ($guid)"
|
|
$skipNextEndProject = $true
|
|
continue
|
|
} else {
|
|
$projectNames[$name] = $true
|
|
}
|
|
}
|
|
|
|
$newLines += $line
|
|
}
|
|
|
|
# Also remove duplicate GUIDs from GlobalSection
|
|
$finalLines = @()
|
|
foreach ($line in $newLines) {
|
|
$skip = $false
|
|
foreach ($guid in $duplicateGuids) {
|
|
if ($line -match $guid) {
|
|
$skip = $true
|
|
break
|
|
}
|
|
}
|
|
if (-not $skip) {
|
|
$finalLines += $line
|
|
}
|
|
}
|
|
|
|
$finalLines | Out-File -FilePath $SlnPath -Encoding UTF8 -NoNewline
|
|
Write-Host "`nRemoved $($duplicateGuids.Count) duplicate projects"
|