public async Task LoadOnDemandProjectAndItsReference() { var configData = new Dictionary <string, string> { [$"MsBuild:{nameof(MSBuildOptions.LoadProjectsOnDemand)}"] = "true" }.ToConfiguration(); using (var testProject = await TestAssets.Instance.GetTestProjectAsync("TwoProjectsWithSolution")) using (var host = CreateMSBuildTestHost(testProject.Directory, configurationData: configData)) { MSBuildWorkspaceInfo workspaceInfo = await host.RequestMSBuildWorkspaceInfoAsync(); // Expect empty workspace initially since no documents have been requested yet Assert.Null(workspaceInfo.SolutionPath); Assert.NotNull(workspaceInfo.Projects); Assert.Equal(0, workspaceInfo.Projects.Count); // Requesting app document should load both projects MembersAsTreeService membersAsTreeService = host.GetRequestHandler <MembersAsTreeService>(OmniSharpEndpoints.MembersTree); var request = new MembersTreeRequest { FileName = Path.Combine(testProject.Directory, "App", "Program.cs") }; FileMemberTree response = await membersAsTreeService.Handle(request); workspaceInfo = await host.RequestMSBuildWorkspaceInfoAsync(); Assert.NotNull(request); Assert.Null(workspaceInfo.SolutionPath); Assert.NotNull(workspaceInfo.Projects); Assert.Equal(2, workspaceInfo.Projects.Count); Assert.Equal("App.csproj", Path.GetFileName(workspaceInfo.Projects[0].Path)); Assert.Equal("Lib.csproj", Path.GetFileName(workspaceInfo.Projects[1].Path)); } }
public static async Task <FileMemberTree> TranslateAsync(this FileMemberTree response, OmniSharpWorkspace workspace, Request request) { var zeroIndex = await LineIndexHelper.TranslateToGenerated(request.FileName, 0, workspace); var topLevelTypeDefinitions = new List <FileMemberElement>(); foreach (var topLevelTypeDefinition in response.TopLevelTypeDefinitions) { if (topLevelTypeDefinition.Location.Line < zeroIndex) { continue; } await topLevelTypeDefinition.TranslateAsync(workspace, request); if (topLevelTypeDefinition.Location.Line >= 0) { topLevelTypeDefinitions.Add(topLevelTypeDefinition); } } response.TopLevelTypeDefinitions = topLevelTypeDefinitions; return(response); }