diff --git a/src/MSBuildLocator/DotNetSdkLocationHelper.cs b/src/MSBuildLocator/DotNetSdkLocationHelper.cs index 4876e85a..1bfaaff7 100644 --- a/src/MSBuildLocator/DotNetSdkLocationHelper.cs +++ b/src/MSBuildLocator/DotNetSdkLocationHelper.cs @@ -55,7 +55,8 @@ public static VisualStudioInstance GetInstance(string workingDirectory) name: ".NET Core SDK", path: dotNetSdkPath, version: new Version(major, minor, patch), - discoveryType: DiscoveryType.DotNetSdk); + discoveryType: DiscoveryType.DotNetSdk, + true); } private static string GetDotNetBasePath(string workingDirectory) diff --git a/src/MSBuildLocator/MSBuildLocator.cs b/src/MSBuildLocator/MSBuildLocator.cs index 3279f14a..eb6a4736 100644 --- a/src/MSBuildLocator/MSBuildLocator.cs +++ b/src/MSBuildLocator/MSBuildLocator.cs @@ -354,7 +354,7 @@ private static VisualStudioInstance GetDevConsoleInstance() if(version != null) { - return new VisualStudioInstance("DEVCONSOLE", path, version, DiscoveryType.DeveloperConsole); + return new VisualStudioInstance("DEVCONSOLE", path, version, DiscoveryType.DeveloperConsole, false); } } diff --git a/src/MSBuildLocator/VisualStudioInstance.cs b/src/MSBuildLocator/VisualStudioInstance.cs index e8185dec..00dafb61 100644 --- a/src/MSBuildLocator/VisualStudioInstance.cs +++ b/src/MSBuildLocator/VisualStudioInstance.cs @@ -11,12 +11,13 @@ namespace Microsoft.Build.Locator /// public class VisualStudioInstance { - internal VisualStudioInstance(string name, string path, Version version, DiscoveryType discoveryType) + internal VisualStudioInstance(string name, string path, Version version, DiscoveryType discoveryType, bool hasCSharp) { Name = name; VisualStudioRootPath = path; Version = version; DiscoveryType = discoveryType; + ContainsRoslynCompiler = hasCSharp; switch (discoveryType) { @@ -59,5 +60,10 @@ internal VisualStudioInstance(string name, string path, Version version, Discove /// Indicates how this instance was discovered. /// public DiscoveryType DiscoveryType { get; } + + /// + /// Indicates whether this instance has the C# package installed. + /// + public bool ContainsRoslynCompiler { get; } } } \ No newline at end of file diff --git a/src/MSBuildLocator/VisualStudioLocationHelper.cs b/src/MSBuildLocator/VisualStudioLocationHelper.cs index 87d1c22d..485a3507 100644 --- a/src/MSBuildLocator/VisualStudioLocationHelper.cs +++ b/src/MSBuildLocator/VisualStudioLocationHelper.cs @@ -6,6 +6,7 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Runtime.InteropServices; using Microsoft.VisualStudio.Setup.Configuration; @@ -53,24 +54,17 @@ internal static IList GetInstances() if (state == InstanceState.Complete || (state.HasFlag(InstanceState.Registered) && state.HasFlag(InstanceState.NoRebootRequired))) { - bool instanceHasMSBuild = false; - - foreach (ISetupPackageReference package in instance.GetPackages()) - { - if (string.Equals(package.GetId(), "Microsoft.Component.MSBuild", StringComparison.OrdinalIgnoreCase)) - { - instanceHasMSBuild = true; - break; - } - } + bool instanceHasMSBuild = instance.GetPackages().Any(package => package.GetId().Equals("Microsoft.Component.MSBuild", StringComparison.OrdinalIgnoreCase)); if (instanceHasMSBuild) { + bool instanceHasCSCompiler = instance.GetPackages().Any(package => package.GetId().Equals("Microsoft.VisualStudio.Component.Roslyn.Compiler", StringComparison.OrdinalIgnoreCase)); validInstances.Add(new VisualStudioInstance( instance.GetDisplayName(), instance.GetInstallationPath(), version, - DiscoveryType.VisualStudioSetup)); + DiscoveryType.VisualStudioSetup, + instanceHasCSCompiler)); } } } while (fetched > 0);