diff --git a/src/Workspaces/Remote/Core/Services/SolutionService.cs b/src/Workspaces/Remote/Core/Services/SolutionService.cs index c72417db6e889933497b1b2a3d31582c374c54db..fa2b18a2d74b3ff78da09534dae00c1c1bca1166 100644 --- a/src/Workspaces/Remote/Core/Services/SolutionService.cs +++ b/src/Workspaces/Remote/Core/Services/SolutionService.cs @@ -58,6 +58,11 @@ public async Task GetSolutionAsync(Checksum solutionChecksum, Cancella public async Task GetSolutionAsync(Checksum solutionChecksum, OptionSet optionSet, CancellationToken cancellationToken) { + if (optionSet == null) + { + return await GetSolutionAsync(solutionChecksum, cancellationToken).ConfigureAwait(false); + } + // since option belong to workspace, we can't share solution // create new solution diff --git a/src/Workspaces/Remote/ServiceHub/Services/CodeAnalysisService_Diagnostics.cs b/src/Workspaces/Remote/ServiceHub/Services/CodeAnalysisService_Diagnostics.cs index 8d5352f7f5ca41a4e767965f3c9cd656c7caf992..97eca537827667f095ce8d96f117bc92235e611f 100644 --- a/src/Workspaces/Remote/ServiceHub/Services/CodeAnalysisService_Diagnostics.cs +++ b/src/Workspaces/Remote/ServiceHub/Services/CodeAnalysisService_Diagnostics.cs @@ -33,7 +33,7 @@ public async Task CalculateDiagnosticsAsync(DiagnosticArguments arguments, byte[ var optionSet = await RoslynServices.AssetService.GetAssetAsync(arguments.GetOptionSetChecksum(), CancellationToken).ConfigureAwait(false); // entry point for diagnostic service - var solution = await GetSolutionAsync().ConfigureAwait(false); + var solution = await GetSolutionWithSpecificOptionsAsync(optionSet).ConfigureAwait(false); var projectId = arguments.GetProjectId(); var analyzers = await GetHostAnalyzerReferences(arguments.GetHostAnalyzerChecksums()).ConfigureAwait(false); diff --git a/src/Workspaces/Remote/ServiceHub/Services/ServiceHubServiceBase.cs b/src/Workspaces/Remote/ServiceHub/Services/ServiceHubServiceBase.cs index 8e88226dd535c7fe122ff26a76d7f6f6964b16af..68e7e2cce2349a2a512360c4185b9fef5e4b0cf0 100644 --- a/src/Workspaces/Remote/ServiceHub/Services/ServiceHubServiceBase.cs +++ b/src/Workspaces/Remote/ServiceHub/Services/ServiceHubServiceBase.cs @@ -5,6 +5,7 @@ using System.IO; using System.Threading; using System.Threading.Tasks; +using Microsoft.CodeAnalysis.Options; using Roslyn.Utilities; using StreamJsonRpc; @@ -66,6 +67,12 @@ protected Task GetSolutionAsync() return RoslynServices.SolutionService.GetSolutionAsync(_solutionChecksumOpt, CancellationToken); } + protected Task GetSolutionWithSpecificOptionsAsync(OptionSet options) + { + Contract.ThrowIfNull(_solutionChecksumOpt); + return RoslynServices.SolutionService.GetSolutionAsync(_solutionChecksumOpt, options, CancellationToken); + } + protected virtual void Dispose(bool disposing) { // do nothing here