Skip to content

Commit

Permalink
Improve choosing of MSBuild location
Browse files Browse the repository at this point in the history
  • Loading branch information
josefpihrt committed Aug 15, 2021
1 parent a01ac47 commit 0b7cb32
Showing 1 changed file with 22 additions and 29 deletions.
51 changes: 22 additions & 29 deletions src/CommandLine/Commands/MSBuildWorkspaceCommand.cs
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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<string, string> properties))
return null;
Expand All @@ -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<Version, VisualStudioInstance> instances = MSBuildLocator.QueryVisualStudioInstances()
List<VisualStudioInstance> 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<VisualStudioInstance> 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<Project> FilterProjects(
Expand Down

0 comments on commit 0b7cb32

Please sign in to comment.