Skip to content
This repository was archived by the owner on Dec 13, 2025. It is now read-only.

Commit 35d49fc

Browse files
ElRatoVadim Starodubov
andauthored
#246 Solution analysis missing project in folders (#247)
* #246 Solution analysis missing project in folders * #246 Solution analysis missing project in folders Co-authored-by: Vadim Starodubov <vadim.starodubov@railsreactor.com>
1 parent dd74271 commit 35d49fc

1 file changed

Lines changed: 21 additions & 2 deletions

File tree

Source/MDKServices/HealthAnalysis.cs

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,14 +30,33 @@ public class HealthAnalysis
3030
/// <param name="solution"></param>
3131
/// <param name="options"></param>
3232
/// <returns></returns>
33-
public static Task<HealthAnalysis[]> AnalyzeAsync(Solution solution, HealthAnalysisOptions options) => System.Threading.Tasks.Task.WhenAll(solution.Projects.Cast<Project>().Select(project => System.Threading.Tasks.Task.Run(() => Analyze(project, options))));
33+
public static Task<HealthAnalysis[]> AnalyzeAsync(Solution solution, HealthAnalysisOptions options) {
34+
var projectTaks = GetProjects(solution.Projects.Cast<Project>()).Select(project => System.Threading.Tasks.Task.Run(() => Analyze(project, options)));
35+
return System.Threading.Tasks.Task.WhenAll(projectTaks);
36+
}
37+
38+
private const string C_SHARP_PROJECT_KIND = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}";
39+
40+
private static IEnumerable<Project> GetProjects(IEnumerable<Project> projects) {
41+
var result = new List<Project>();
42+
foreach (var project in projects) {
43+
if (new Guid(project.Kind) == new Guid(C_SHARP_PROJECT_KIND))
44+
result.Add(project);
45+
else if (project.ProjectItems != null)
46+
{
47+
result.AddRange(GetProjects(project.ProjectItems.Cast<ProjectItem>().Select(x => x.SubProject).OfType<Project>()));
48+
}
49+
}
50+
return result;
51+
}
3452

3553
// ReSharper disable once InconsistentNaming
3654
private const int RPC_E_SERVERCALL_RETRYLATER = unchecked((int)0x8001010A);
3755

56+
3857
static HealthAnalysis Analyze(Project project, HealthAnalysisOptions options)
3958
{
40-
options.Echo?.Invoke("Analyzing project...");
59+
options.Echo?.Invoke($"{project.Name}: Analyzing project...");
4160
while (true)
4261
{
4362
try

0 commit comments

Comments
 (0)