diff --git a/build/repo.targets b/build/repo.targets
index 578368867c..e5bfffddc4 100644
--- a/build/repo.targets
+++ b/build/repo.targets
@@ -38,6 +38,24 @@
$(CodeSignDependsOn);RemoveSharedFrameworkOnlyRefsFromNuspec
+
+
+
+
+
+
+
+
+
+
+
+
+
) and we are working with them for a solution. See also to track progress on this.
-**The workaround** for now is to add all projects to the solution.
+**The workaround** for now is to add all projects to the solution. You can either do this one by one using `dotnet sln`
dotnet sln add C:\src\AspNetCore\src\Hosting\Abstractions\src\Microsoft.AspNetCore.Hosting.Abstractions.csproj
+Or you can use this script to automatically traverse the project reference graph, which then invokes `dotnet sln` for you: [eng/scripts/AddAllProjectRefsToSolution.ps1](/eng/scripts/AddAllProjectRefsToSolution.ps1).
+
+ ./eng/scripts/AddAllProjectRefsToSolution.ps1 -WorkingDir src/Mvc/
#### PATH
diff --git a/eng/scripts/AddAllProjectRefsToSolution.ps1 b/eng/scripts/AddAllProjectRefsToSolution.ps1
new file mode 100644
index 0000000000..274c098fba
--- /dev/null
+++ b/eng/scripts/AddAllProjectRefsToSolution.ps1
@@ -0,0 +1,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 "
+ exit 1
+ }
+ if ($slnCount.count -gt 1) {
+ Write-Error "Multiple solutions found in this directory. Specify which one to modify with -sln "
+ 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
+}
diff --git a/eng/targets/ResolveReferences.targets b/eng/targets/ResolveReferences.targets
index d9e04521b1..149ec43822 100644
--- a/eng/targets/ResolveReferences.targets
+++ b/eng/targets/ResolveReferences.targets
@@ -169,4 +169,30 @@
+
+
+
+ <_CustomCollectProjectReferenceDependsOn Condition="'$(TargetFramework)' != ''">ResolveProjectReferences
+
+
+
+ <_TargetFrameworks Include="$(TargetFrameworks)" />
+
+
+
+
+
+
+
+