Skip to content

Commit 744a65b

Browse files
committed
Added Clear-VisualStudioSolutionFolder
1 parent b210287 commit 744a65b

File tree

1 file changed

+106
-0
lines changed

1 file changed

+106
-0
lines changed
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
function Get-FoldersToRemove {
2+
[CmdletBinding()]
3+
param(
4+
[Parameter(Mandatory = $true, Position = 0 )]
5+
[string]$StartPath
6+
)
7+
8+
begin {
9+
Write-Verbose "Cmdlet Get-FoldersToRemove - Begin"
10+
$foldersToRemove = @()
11+
}
12+
13+
process {
14+
Write-Verbose "Cmdlet Get-FoldersToRemove - Process"
15+
Get-ChildItem -Path $StartPath -Recurse -ErrorAction SilentlyContinue | ? { $_.Extension -eq ".csproj" } | % {
16+
Write-Verbose "[CSPROJ]: $($_.FullName)"
17+
18+
$binPath = "$($_.Directory)/bin"
19+
if (Test-Path $binPath) {
20+
Write-Verbose "`t[BIN]:`t`t $binPath"
21+
$binFolder = Get-Item -Path $binPath
22+
$foldersToRemove += $binFolder
23+
}
24+
25+
$objPath = "$($_.Directory)/obj"
26+
if (Test-Path $objPath) {
27+
Write-Verbose "`t[OBJ]:`t`t $objPath"
28+
$objFolder = Get-Item -Path $objPath
29+
$foldersToRemove += $objFolder
30+
}
31+
32+
[xml]$csproj = Get-Content -Path $_.FullName
33+
if ($csproj.Project.ItemGroup.None.Include | ? { $_ -eq "packages.config" }) {
34+
$prjcRelativePath = $csproj.Project.ItemGroup.Reference.HintPath | ? { $_ -ne $null -and $_.Length -gt 0 } | ? { $_.Contains("\packages\") } | Select-Object -First 1
35+
if ($prjcRelativePath -ne $null) {
36+
37+
38+
$path = [System.IO.Path]::GetFullPath((Join-Path $_.DirectoryName $prjcRelativePath ))
39+
if (Test-Path $path) {
40+
$dllFile = Get-Item -Path $path
41+
$packagesFolder = $dllFile
42+
43+
while ($packagesFolder.Name -ne "packages" -and $packagesFolder.Parent -ne $packagesFolder) {
44+
$packagesFolder = Get-Item $packagesFolder.PSParentPath
45+
}
46+
47+
if ($foldersToRemove.Length -eq 0 -or ($foldersToRemove.FullName.Contains($packagesFolder.FullName) -eq $false)) {
48+
Write-Verbose "`t[PACKAGES]:`t $packagesFolder"
49+
$foldersToRemove += $packagesFolder
50+
}
51+
}
52+
}
53+
}
54+
}
55+
$foldersToRemove
56+
}
57+
58+
end {
59+
Write-Verbose "Cmdlet Get-FoldersToRemove - End"
60+
}
61+
}
62+
63+
function Clear-VisualStudioSolutionFolder {
64+
<#
65+
.SYNOPSIS
66+
Solution folder cleanup
67+
68+
.DESCRIPTION
69+
Removes bin, obj folders for all projects in a given directory
70+
71+
.PARAMETER StartPath
72+
Start directory
73+
74+
.EXAMPLE
75+
Clear-VisualStudioSolutionFolder -StartPath "C:\repo\XA\src\"
76+
Runs solution cleanup for all projects under "C:\repo\XA\src\"
77+
78+
#>
79+
[CmdletBinding()]
80+
param(
81+
[Parameter(Mandatory = $true, Position = 0 )]
82+
[string]$StartPath,
83+
[Parameter(Mandatory = $false, Position = 1 )]
84+
[switch]$Confirm
85+
)
86+
87+
begin {
88+
Write-Verbose "Cmdlet Clear-VisualStudioSolutionFolder - Begin"
89+
}
90+
91+
process {
92+
Write-Verbose "Cmdlet Clear-VisualStudioSolutionFolder - Process"
93+
Get-FoldersToRemove $StartPath | % {
94+
if ($Confirm) {
95+
Remove-Item -Path $_.FullName -Recurse -Confirm
96+
}
97+
else {
98+
Remove-Item -Path $_.FullName -Recurse
99+
}
100+
}
101+
}
102+
103+
end {
104+
Write-Verbose "Cmdlet Clear-VisualStudioSolutionFolder - End"
105+
}
106+
}

0 commit comments

Comments
 (0)