forked from dotnet/aspnetcore
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathAddAllProjectRefsToSolution.ps1
60 lines (49 loc) · 1.72 KB
/
AddAllProjectRefsToSolution.ps1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<#
.SYNOPSIS
This adds the complete closure of project references to a .sln file
.EXAMPLE
Let's say you have a folder of projects in src/Banana/, and a file src/Banana/Banana.sln.
To traverse the ProjectReference graph to add all dependency projects, run this script:
./eng/scripts/AddAllProjectRefsToSolution.ps1 -WorkingDir ./src/Banana/
.EXAMPLE
If src/Banana/ has multiple .sln files, use the -sln parameter.
./eng/scripts/AddAllProjectRefsToSolution.ps1 -WorkingDir ./src/Banana/ -SolutionFile src/Banana/Solution1.sln
#>
[CmdletBinding(PositionalBinding = $false)]
param(
[string]$WorkingDir,
[Alias('sln')]
[string]$SolutionFile
)
$ErrorActionPreference = 'Stop'
$repoRoot = Resolve-Path "$PSScriptRoot/../../"
$listFile = New-TemporaryFile
if (-not $WorkingDir) {
$WorkingDir = Get-Location
}
Push-Location $WorkingDir
try {
if (-not $SolutionFile) {
$slnCount = Get-ChildItem *.sln | Measure
if ($slnCount.count -eq 0) {
Write-Error "Could not find a solution in this directory. Specify one with -sln <PATH>"
exit 1
}
if ($slnCount.count -gt 1) {
Write-Error "Multiple solutions found in this directory. Specify which one to modify with -sln <PATH>"
exit 1
}
$SolutionFile = Get-ChildItem *.sln | select -first 1
}
& "$repoRoot\build.ps1" -projects "$(Get-Location)\**\*.*proj" /t:ShowProjectClosure "/p:ProjectsReferencedOutFile=$listFile"
foreach ($proj in (Get-Content $listFile)) {
& dotnet sln $SolutionFile add $proj
if ($lastexitcode -ne 0) {
Write-Warning "Failed to add $proj to $SolutionFile"
}
}
}
finally {
Pop-Location
rm $listFile -ea ignore
}