diff --git a/tools/BuildGraph/Project.cs b/tools/BuildGraph/Project.cs
index 12d3da6fb4edbcf09e2217f9a6845ae4608b5960..af8761e829228953cb00f4eefc3ce12d813cb974 100644
--- a/tools/BuildGraph/Project.cs
+++ b/tools/BuildGraph/Project.cs
@@ -14,8 +14,10 @@ namespace BuildGraph
 
         public string Name { get; }
 
+        public string Path { get; set; }
+
         public Repository Repository { get; set; }
 
-        public IList<string> PackageReferences { get; set; } = Array.Empty<string>();
+        public ISet<string> PackageReferences { get; } = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
     }
 }
\ No newline at end of file
diff --git a/tools/BuildGraph/Repository.cs b/tools/BuildGraph/Repository.cs
index 821ffc54c08f710f1cd86f4a7a114a0412009c64..e8893d7ff87805d4d8ddacb80cee0704a7843a90 100644
--- a/tools/BuildGraph/Repository.cs
+++ b/tools/BuildGraph/Repository.cs
@@ -61,37 +61,41 @@ namespace BuildGraph
             var srcDirectory = Path.Combine(repositoryPath, "src");
 
             var solutionFiles = Directory.EnumerateFiles(repositoryPath, "*.sln");
-            var knownProjects = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
             foreach (var file in solutionFiles)
             {
                 var spec = provider.GetDependencyGraphSpec(name, file);
-                foreach (var specProject in spec.Projects)
+                var projects = spec.Projects.OrderBy(p => p.RestoreMetadata.ProjectStyle == ProjectStyle.PackageReference ? 0 : 1);
+                foreach (var specProject in projects)
                 {
-                    if (!knownProjects.Add(specProject.FilePath) ||
-                        specProject.RestoreMetadata.ProjectStyle != ProjectStyle.PackageReference)
-                    {
-                        continue;
-                    }
-
                     var projectPath = Path.GetFullPath(specProject.FilePath);
 
-                    var project = new Project(specProject.Name)
-                    {
-                        PackageReferences = GetPackageReferences(specProject),
-                        Repository = repository,
-                    };
-
                     var projectGroup = projectPath.StartsWith(srcDirectory, StringComparison.OrdinalIgnoreCase) ?
                         repository.Projects :
                         repository.SupportProjects;
-                    projectGroup.Add(project);
+
+                    var project = projectGroup.FirstOrDefault(f => f.Path == specProject.FilePath);
+                    if (project == null)
+                    {
+                        project = new Project(specProject.Name)
+                        {
+                            Repository = repository,
+                            Path = specProject.FilePath,
+                        };
+
+                        projectGroup.Add(project);
+                    }
+
+                    foreach (var package in GetPackageReferences(specProject))
+                    {
+                        project.PackageReferences.Add(package);
+                    }
                 }
             }
 
             return repository;
         }
 
-        private static List<string> GetPackageReferences(NuGet.ProjectModel.PackageSpec specProject)
+        private static List<string> GetPackageReferences(PackageSpec specProject)
         {
             var allDependencies = Enumerable.Concat(
                 specProject.Dependencies,