public static LoadMetadataAsSourceSolution ( string assemblyFilePath ) : Microsoft.CodeAnalysis.Solution | ||
assemblyFilePath | string | |
return | Microsoft.CodeAnalysis.Solution |
private Solution CreateSolution(string solutionFilePath, ImmutableDictionary <string, string> properties = null, bool doNotIncludeReferencedProjects = false) { try { Solution solution = null; if (solutionFilePath.EndsWith(".sln", StringComparison.OrdinalIgnoreCase)) { properties = AddSolutionProperties(properties, solutionFilePath); var workspace = CreateWorkspace(properties); workspace.SkipUnrecognizedProjects = true; workspace.WorkspaceFailed += WorkspaceFailed; solution = workspace.OpenSolutionAsync(solutionFilePath).GetAwaiter().GetResult(); solution = DeduplicateProjectReferences(solution); this.workspace = workspace; } else if ( solutionFilePath.EndsWith(".csproj", StringComparison.OrdinalIgnoreCase) || solutionFilePath.EndsWith(".vbproj", StringComparison.OrdinalIgnoreCase)) { var workspace = CreateWorkspace(properties); workspace.WorkspaceFailed += WorkspaceFailed; solution = workspace.OpenProjectAsync(solutionFilePath).GetAwaiter().GetResult().Solution; solution = DeduplicateProjectReferences(solution); if (doNotIncludeReferencedProjects) { var keepPrimaryProject = solution.Projects.First(p => string.Equals(p.FilePath, solutionFilePath, StringComparison.OrdinalIgnoreCase)); foreach (var projectIdToRemove in solution.ProjectIds.Where(id => id != keepPrimaryProject.Id).ToArray()) { solution = solution.RemoveProject(projectIdToRemove); } } this.workspace = workspace; } else if ( solutionFilePath.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) || solutionFilePath.EndsWith(".winmd", StringComparison.OrdinalIgnoreCase) || solutionFilePath.EndsWith(".netmodule", StringComparison.OrdinalIgnoreCase)) { solution = MetadataAsSource.LoadMetadataAsSourceSolution(solutionFilePath); if (solution != null) { solution.Workspace.WorkspaceFailed += WorkspaceFailed; workspace = solution.Workspace; } } return(solution); } catch (Exception ex) { Log.Exception(ex, "Failed to open solution: " + solutionFilePath); return(null); } }
private Solution CreateSolution(string solutionFilePath, ImmutableDictionary <string, string> properties = null) { try { Solution solution = null; if (solutionFilePath.EndsWith(".sln", StringComparison.OrdinalIgnoreCase)) { properties = AddSolutionProperties(properties, solutionFilePath); var workspace = CreateWorkspace(properties); workspace.SkipUnrecognizedProjects = true; workspace.WorkspaceFailed += WorkspaceFailed; solution = workspace.OpenSolutionAsync(solutionFilePath).GetAwaiter().GetResult(); this.workspace = workspace; } else if ( solutionFilePath.EndsWith(".csproj", StringComparison.OrdinalIgnoreCase) || solutionFilePath.EndsWith(".vbproj", StringComparison.OrdinalIgnoreCase)) { var workspace = CreateWorkspace(properties); workspace.WorkspaceFailed += WorkspaceFailed; solution = workspace.OpenProjectAsync(solutionFilePath).GetAwaiter().GetResult().Solution; this.workspace = workspace; } else if ( solutionFilePath.EndsWith(".dll", StringComparison.OrdinalIgnoreCase) || solutionFilePath.EndsWith(".winmd", StringComparison.OrdinalIgnoreCase) || solutionFilePath.EndsWith(".netmodule", StringComparison.OrdinalIgnoreCase)) { solution = MetadataAsSource.LoadMetadataAsSourceSolution(solutionFilePath); if (solution != null) { solution.Workspace.WorkspaceFailed += WorkspaceFailed; workspace = solution.Workspace; } } if (solution == null) { return(null); } return(solution); } catch (Exception ex) { Log.Exception(ex, "Failed to open solution: " + solutionFilePath); return(null); } }