diff --git a/src/OmniSharp.Host/MSBuild/Discovery/MSBuildLocator.cs b/src/OmniSharp.Host/MSBuild/Discovery/MSBuildLocator.cs index 24c2435a2c..226a5ce871 100644 --- a/src/OmniSharp.Host/MSBuild/Discovery/MSBuildLocator.cs +++ b/src/OmniSharp.Host/MSBuild/Discovery/MSBuildLocator.cs @@ -46,13 +46,23 @@ protected override void DisposeCore(bool disposing) } public static MSBuildLocator CreateDefault(ILoggerFactory loggerFactory, IAssemblyLoader assemblyLoader, IConfiguration msbuildConfiguration) - => new MSBuildLocator(loggerFactory, assemblyLoader, + { + var useBundledOnly = msbuildConfiguration.GetValue("UseBundledOnly"); + if (useBundledOnly) + { + var logger = loggerFactory.CreateLogger(); + logger.LogInformation("Because 'UseBundledOnly' is enabled in the configuration, OmniSharp will only use the bundled MSBuild."); + return CreateStandAlone(loggerFactory, assemblyLoader); + } + + return new MSBuildLocator(loggerFactory, assemblyLoader, ImmutableArray.Create( new DevConsoleInstanceProvider(loggerFactory), new VisualStudioInstanceProvider(loggerFactory), new MonoInstanceProvider(loggerFactory), new StandAloneInstanceProvider(loggerFactory), new UserOverrideInstanceProvider(loggerFactory, msbuildConfiguration))); + } public static MSBuildLocator CreateStandAlone(ILoggerFactory loggerFactory, IAssemblyLoader assemblyLoader) => new MSBuildLocator(loggerFactory, assemblyLoader, diff --git a/src/OmniSharp.MSBuild/Options/MSBuildOptions.cs b/src/OmniSharp.MSBuild/Options/MSBuildOptions.cs index 3fb0491ae0..d0cdbe7f50 100644 --- a/src/OmniSharp.MSBuild/Options/MSBuildOptions.cs +++ b/src/OmniSharp.MSBuild/Options/MSBuildOptions.cs @@ -2,6 +2,7 @@ namespace OmniSharp.Options { public class MSBuildOptions { + public bool UseBundledOnly { get; set; } = false; public string ToolsVersion { get; set; } public string VisualStudioVersion { get; set; } public string Configuration { get; set; } diff --git a/tests/OmniSharp.MSBuild.Tests/MSBuildSelectionTests.cs b/tests/OmniSharp.MSBuild.Tests/MSBuildSelectionTests.cs index dfeadd9e0a..1c13d46b30 100644 --- a/tests/OmniSharp.MSBuild.Tests/MSBuildSelectionTests.cs +++ b/tests/OmniSharp.MSBuild.Tests/MSBuildSelectionTests.cs @@ -1,5 +1,9 @@ using System; +using System.Collections.Generic; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; using OmniSharp.MSBuild.Discovery; +using OmniSharp.Services; using TestUtility; using Xunit; using Xunit.Abstractions; @@ -255,6 +259,20 @@ public void StandAloneIsPreferredOverUnsupportedVS(string vsVersion) msbuildLocator.DeleteFakeInstancesFolders(); } + [Fact] + public void CreateDefault_UseBundledOnly_True_LocatesOnlyStandAloneInstance() + { + var configBuilder = new Microsoft.Extensions.Configuration.ConfigurationBuilder().AddInMemoryCollection(new Dictionary() + { + ["useBundledOnly"] = "true" + }); + var loggerFactory = new LoggerFactory(); + var locator = MSBuildLocator.CreateDefault(loggerFactory, new AssemblyLoader(loggerFactory), configBuilder.Build()); + var instances = locator.GetInstances(); + Assert.Single(instances); + Assert.Equal(DiscoveryType.StandAlone, instances[0].DiscoveryType); + } + private static MSBuildInstance GetStandAloneMSBuildInstance() { return new MSBuildInstance(