diff --git a/src/CommandLine/Commands/MSBuildWorkspaceCommand.cs b/src/CommandLine/Commands/MSBuildWorkspaceCommand.cs index 89b020b9b3..0130507ab4 100644 --- a/src/CommandLine/Commands/MSBuildWorkspaceCommand.cs +++ b/src/CommandLine/Commands/MSBuildWorkspaceCommand.cs @@ -232,7 +232,7 @@ private static MSBuildWorkspace CreateMSBuildWorkspace(string msbuildPath, IEnum { MSBuildLocator.RegisterMSBuildPath(msbuildPath); } - else if (TryGetSingleInstance(out VisualStudioInstance instance)) + else if (TryGetVisualStudioInstance(out VisualStudioInstance instance)) { MSBuildLocator.RegisterInstance(instance); msbuildPath = instance.MSBuildPath; @@ -242,7 +242,7 @@ private static MSBuildWorkspace CreateMSBuildWorkspace(string msbuildPath, IEnum return null; } - WriteLine($"MSBuild location is '{msbuildPath}'", Verbosity.Diagnostic); + WriteLine($"MSBuild location is '{msbuildPath}'", Verbosity.Detailed); if (!ParseHelpers.TryParseMSBuildProperties(rawProperties, out Dictionary properties)) return null; @@ -257,46 +257,39 @@ private static MSBuildWorkspace CreateMSBuildWorkspace(string msbuildPath, IEnum return MSBuildWorkspace.Create(properties); } - private static bool TryGetSingleInstance(out VisualStudioInstance instance) + private static bool TryGetVisualStudioInstance(out VisualStudioInstance instance) { - IGrouping instances = MSBuildLocator.QueryVisualStudioInstances() + List instances = MSBuildLocator.QueryVisualStudioInstances() .Distinct(VisualStudioInstanceComparer.MSBuildPath) - .GroupBy(f => f.Version) - .OrderByDescending(f => f.Key) - .FirstOrDefault(); + .ToList(); - if (instances == null) + if (instances.Count == 0) { WriteLine($"MSBuild location not found. Use option '-{OptionShortNames.MSBuildPath}, --{OptionNames.MSBuildPath}' to specify MSBuild location", Verbosity.Quiet); instance = null; return false; } - using (IEnumerator en = instances.GetEnumerator()) - { - en.MoveNext(); - - instance = en.Current; - - if (en.MoveNext()) - { - WriteLine("Multiple MSBuild locations found:", Verbosity.Quiet); - - WriteLine($" {instance.MSBuildPath}", Verbosity.Quiet); - - do - { - WriteLine($" {en.Current.MSBuildPath}", Verbosity.Quiet); + WriteLine("Available MSBuild locations:", Verbosity.Diagnostic); - } while (en.MoveNext()); + foreach (VisualStudioInstance vsi in instances.OrderBy(f => f.Version)) + WriteLine($" {vsi.Name}, Version: {vsi.Version}, Path: {vsi.MSBuildPath}", Verbosity.Diagnostic); - WriteLine($"Use option '--{OptionNames.MSBuildPath}' to specify MSBuild location", Verbosity.Quiet); - instance = null; - return false; - } + instances = instances + .GroupBy(f => f.Version) + .OrderByDescending(f => f.Key) + .First() + .ToList(); - return true; + if (instances.Count > 1) + { + WriteLine($"Cannot choose MSBuild location automatically. Use option '-{OptionShortNames.MSBuildPath}, --{OptionNames.MSBuildPath}' to specify MSBuild location", Verbosity.Quiet); + instance = null; + return false; } + + instance = instances[0]; + return true; } private protected IEnumerable FilterProjects(