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);