diff --git a/build.cake b/build.cake index 83a52ff6b3..ba25a667fe 100644 --- a/build.cake +++ b/build.cake @@ -977,6 +977,8 @@ string PublishBuild(string project, BuildEnvironment env, BuildPlan plan, string { Framework = framework, Runtime = rid, // TODO: With everything today do we need to publish this with a rid? This appears to be legacy bit when we used to push for all supported dotnet core rids. + PublishReadyToRun = true, // Improve startup performance by applying some AOT compilation + SelfContained = false, // Since we are specifying a runtime identifier this defaults to true. We don't need to ship a runtime for net6 because we require the .NET SDK to be installed. Configuration = configuration, OutputDirectory = outputFolder, MSBuildSettings = new DotNetCoreMSBuildSettings() diff --git a/src/OmniSharp.Host/HostHelpers.cs b/src/OmniSharp.Host/HostHelpers.cs index 0b05459bab..7a343d8a33 100644 --- a/src/OmniSharp.Host/HostHelpers.cs +++ b/src/OmniSharp.Host/HostHelpers.cs @@ -1,5 +1,6 @@ using System; using Microsoft.Extensions.Logging; +using OmniSharp.MSBuild.Discovery; using OmniSharp.Roslyn; using OmniSharp.Utilities; @@ -28,6 +29,11 @@ public static int Start(Func action) return action(); } + catch (MSBuildNotFoundException mnfe) + { + Console.Error.WriteLine(mnfe.Message); + return 0xbad; + } catch (Exception e) { Console.Error.WriteLine(e.ToString()); diff --git a/src/OmniSharp.Host/MSBuild/Discovery/Extensions.cs b/src/OmniSharp.Host/MSBuild/Discovery/Extensions.cs index 731000fee1..55f28ea19d 100644 --- a/src/OmniSharp.Host/MSBuild/Discovery/Extensions.cs +++ b/src/OmniSharp.Host/MSBuild/Discovery/Extensions.cs @@ -72,7 +72,7 @@ Try updating your MSBuild to version {minimumMSBuildVersion} or higher to enable } else { - logger.LogError("Could not locate MSBuild instance to register with OmniSharp"); + throw new MSBuildNotFoundException("Could not locate MSBuild instance to register with OmniSharp."); } } diff --git a/src/OmniSharp.Host/MSBuild/Discovery/MSBuildNotFoundException.cs b/src/OmniSharp.Host/MSBuild/Discovery/MSBuildNotFoundException.cs new file mode 100644 index 0000000000..f089e8cbee --- /dev/null +++ b/src/OmniSharp.Host/MSBuild/Discovery/MSBuildNotFoundException.cs @@ -0,0 +1,19 @@ +using System; + +namespace OmniSharp.MSBuild.Discovery +{ + internal class MSBuildNotFoundException : Exception + { + public MSBuildNotFoundException() + { + } + + public MSBuildNotFoundException(string message) : base(message) + { + } + + public MSBuildNotFoundException(string message, Exception innerException) : base(message, innerException) + { + } + } +} diff --git a/src/OmniSharp.Host/MSBuild/Discovery/Providers/MicrosoftBuildLocatorInstanceProvider.cs b/src/OmniSharp.Host/MSBuild/Discovery/Providers/MicrosoftBuildLocatorInstanceProvider.cs index 364d751dbd..91ffa13dcb 100644 --- a/src/OmniSharp.Host/MSBuild/Discovery/Providers/MicrosoftBuildLocatorInstanceProvider.cs +++ b/src/OmniSharp.Host/MSBuild/Discovery/Providers/MicrosoftBuildLocatorInstanceProvider.cs @@ -22,9 +22,17 @@ public override ImmutableArray GetInstances() { #if NETCOREAPP + const string DotNetSdkVersion = "6.0.100"; + // Restrict instances to NET 6 SDK var instances = MicrosoftBuildLocator.QueryVisualStudioInstances() - .Where(instance => instance.Version.Major == 6); + .Where(instance => instance.Version.ToString() == DotNetSdkVersion) + .ToImmutableArray(); + + if (instances.Length == 0) + { + Logger.LogError($"OmniSharp requires .NET SDK version '{DotNetSdkVersion}' be installed. Please visit https://dotnet.microsoft.com/download/dotnet/6.0 to download the .NET SDK."); + } #else if (!PlatformHelper.IsWindows) {