public static MSBuildInstance GetBestInstance(this IMSBuildLocator msbuildLocator, Version minimumMSBuildVersion, ILogger logger, out bool invalidVSFound, out bool vsWithoutSdkResolver) { invalidVSFound = false; vsWithoutSdkResolver = false; MSBuildInstance bestMatchInstance = null; var bestMatchScore = 0; foreach (var instance in msbuildLocator.GetInstances()) { var score = GetInstanceFeatureScore(instance, minimumMSBuildVersion); logger.LogDebug($"MSBuild instance {instance.Name} {instance.Version} scored at {score}"); invalidVSFound = invalidVSFound || instance.IsInvalidVisualStudio(); vsWithoutSdkResolver = vsWithoutSdkResolver || (!instance.IsInvalidVisualStudio() && !instance.HasDotNetSdksResolvers()); if (bestMatchInstance == null || score > bestMatchScore || score == bestMatchScore && instance.Version > bestMatchInstance.Version) { bestMatchInstance = instance; bestMatchScore = score; } } return(bestMatchInstance); }
public static MSBuildInstance GetBestInstance(this IMSBuildLocator msbuildLocator, ILogger logger, out bool invalidVSFound) { invalidVSFound = false; MSBuildInstance bestMatchInstance = null; var bestMatchScore = 0; foreach (var instance in msbuildLocator.GetInstances()) { var score = GetInstanceFeatureScore(instance); logger.LogDebug($"MSBuild instance {instance.Name} {instance.Version} scored at {score}"); invalidVSFound = invalidVSFound || instance.IsInvalidVisualStudio(); if (bestMatchInstance == null || score > bestMatchScore || score == bestMatchScore && instance.Version > bestMatchInstance.Version) { bestMatchInstance = instance; bestMatchScore = score; } } return(bestMatchInstance); }
public static MSBuildInstance GetBestInstance(this IMSBuildLocator msbuildLocator, out bool invalidVSFound) { invalidVSFound = false; MSBuildInstance bestMatchInstance = null; var bestMatchScore = 0; foreach (var instance in msbuildLocator.GetInstances()) { var score = GetInstanceFeatureScore(instance); invalidVSFound = invalidVSFound || instance.IsInvalidVisualStudio(); if (score > bestMatchScore || (score == bestMatchScore && instance.Version.Major > (bestMatchInstance?.Version.Major ?? 0))) { bestMatchInstance = instance; bestMatchScore = score; } } return(bestMatchInstance); }
private static void RegisterMSBuildInstance(IMSBuildLocator msbuildLocator, ILogger logger) { MSBuildInstance instanceToRegister = null; var invalidVSFound = false; foreach (var instance in msbuildLocator.GetInstances()) { if (instance.IsInvalidVisualStudio()) { invalidVSFound = true; } else { instanceToRegister = instance; break; } } if (instanceToRegister != null) { // Did we end up choosing the standalone MSBuild because there was an invalid Visual Studio? // If so, provide a helpful message to the user. if (invalidVSFound && instanceToRegister.DiscoveryType == DiscoveryType.StandAlone) { logger.LogWarning(@"It looks like you have Visual Studio 2017 RTM installed. Try updating Visual Studio 2017 to the most recent release to enable better MSBuild support."); } msbuildLocator.RegisterInstance(instanceToRegister); } else { logger.LogError("Could not locate MSBuild instance to register with OmniSharp"); } }