public Worker( HostWorkspaceServices services, DiagnosticReporter diagnosticReporter, PathResolver pathResolver, ProjectFileLoaderRegistry projectFileLoaderRegistry, ProjectBuildManager buildManager, ImmutableArray <string> requestedProjectPaths, string baseDirectory, ImmutableDictionary <string, string> globalProperties, ProjectMap projectMap, IProgress <ProjectLoadProgress> progress, DiagnosticReportingOptions requestedProjectOptions, DiagnosticReportingOptions discoveredProjectOptions, bool preferMetadataForReferencesOfDiscoveredProjects) { _workspaceServices = services; _diagnosticReporter = diagnosticReporter; _pathResolver = pathResolver; _projectFileLoaderRegistry = projectFileLoaderRegistry; _buildManager = buildManager; _baseDirectory = baseDirectory; _requestedProjectPaths = requestedProjectPaths; _globalProperties = globalProperties; _projectMap = projectMap ?? ProjectMap.Create(); _progress = progress; _requestedProjectOptions = requestedProjectOptions; _discoveredProjectOptions = discoveredProjectOptions; _preferMetadataForReferencesOfDiscoveredProjects = preferMetadataForReferencesOfDiscoveredProjects; _projectIdToFileInfoMap = new Dictionary <ProjectId, ProjectFileInfo>(); _pathToDiscoveredProjectInfosMap = new Dictionary <string, ImmutableArray <ProjectInfo> >(PathUtilities.Comparer); _projectIdToProjectReferencesMap = new Dictionary <ProjectId, List <ProjectReference> >(); }
protected override ProjectFile CreateProjectFile( MSB.Evaluation.Project?project, ProjectBuildManager buildManager, DiagnosticLog log ) { return(new VisualBasicProjectFile(this, project, buildManager, log)); }
public VisualBasicProjectFile( VisualBasicProjectFileLoader loader, MSB.Evaluation.Project?loadedProject, ProjectBuildManager buildManager, DiagnosticLog log ) : base(loader, loadedProject, buildManager, log) { }
public CSharpProjectFile( CSharpProjectFileLoader loader, MSB.Evaluation.Project?project, ProjectBuildManager buildManager, DiagnosticLog log ) : base(loader, project, buildManager, log) { }
protected ProjectFile(ProjectFileLoader loader, MSB.Evaluation.Project?loadedProject, ProjectBuildManager buildManager, DiagnosticLog log) { _loader = loader; _loadedProject = loadedProject; _buildManager = buildManager; var directory = loadedProject?.DirectoryPath ?? string.Empty; _projectDirectory = PathUtilities.EnsureTrailingSeparator(directory); Log = log; }
public async Task <IProjectFile> LoadProjectFileAsync(string path, ProjectBuildManager buildManager, CancellationToken cancellationToken) { if (path == null) { throw new ArgumentNullException(nameof(path)); } // load project file async var(project, log) = await buildManager.LoadProjectAsync(path, cancellationToken).ConfigureAwait(false); return(this.CreateProjectFile(project, buildManager, log)); }
protected ProjectFile(ProjectFileLoader loader, MSB.Evaluation.Project loadedProject, ProjectBuildManager buildManager, DiagnosticLog log) { _loader = loader; _loadedProject = loadedProject; _buildManager = buildManager; _projectDirectory = loadedProject != null ? PathUtilities.EnsureTrailingSeparator(loadedProject.DirectoryPath) : null; Log = log; }
internal MSBuildProjectLoader( Workspace workspace, DiagnosticReporter diagnosticReporter, ProjectFileLoaderRegistry projectFileLoaderRegistry, ImmutableDictionary <string, string> properties) { _workspace = workspace; _diagnosticReporter = diagnosticReporter ?? new DiagnosticReporter(workspace); _pathResolver = new PathResolver(_diagnosticReporter); _projectFileLoaderRegistry = projectFileLoaderRegistry ?? new ProjectFileLoaderRegistry(workspace, _diagnosticReporter); _properties = ImmutableDictionary.Create <string, string>(StringComparer.OrdinalIgnoreCase); if (properties != null) { _properties = _properties.AddRange(properties); } BuildManager = new ProjectBuildManager(); }
/// <summary> /// Loads the <see cref="ProjectInfo"/> from the specified project file and all referenced projects. /// The first <see cref="ProjectInfo"/> in the result corresponds to the specified project file. /// </summary> /// <param name="projectFilePath">The path to the project file to be loaded. This may be an absolute path or a path relative to the /// current working directory.</param> /// <param name="projectMap">An optional <see cref="ProjectMap"/> that will be used to resolve project references to existing projects. /// This is useful when populating a custom <see cref="Workspace"/>.</param> /// <param name="progress">An optional <see cref="IProgress{T}"/> that will receive updates as the project is loaded.</param> /// <param name="cancellationToken">An optional <see cref="CancellationToken"/> to allow cancellation of this operation.</param> public async Task <ImmutableArray <ProjectInfo> > LoadProjectInfoAsync( string projectFilePath, ProjectMap projectMap = null, IProgress <ProjectLoadProgress> progress = null, CancellationToken cancellationToken = default) { if (projectFilePath == null) { throw new ArgumentNullException(nameof(projectFilePath)); } var requestedProjectOptions = DiagnosticReportingOptions.ThrowForAll; var reportingMode = GetReportingModeForUnrecognizedProjects(); var discoveredProjectOptions = new DiagnosticReportingOptions( onPathFailure: reportingMode, onLoaderFailure: reportingMode); var buildManager = new ProjectBuildManager(_properties); var worker = new Worker( _workspace, _diagnosticReporter, _pathResolver, _projectFileLoaderRegistry, buildManager, requestedProjectPaths: ImmutableArray.Create(projectFilePath), baseDirectory: Directory.GetCurrentDirectory(), globalProperties: _properties, projectMap, progress, requestedProjectOptions, discoveredProjectOptions, this.LoadMetadataForReferencedProjects); return(await worker.LoadAsync(cancellationToken).ConfigureAwait(false)); }
public ErgonProjectFile(ErgonProjectFileLoader loader, ErgonProject project, ProjectBuildManager buildManager, DiagnosticLog log) : base(loader, project, buildManager, log) { }
protected abstract ProjectFile CreateProjectFile(MSB.Evaluation.Project project, ProjectBuildManager buildManager, DiagnosticLog log);
/// <summary> /// Loads the <see cref="SolutionInfo"/> for the specified solution file, including all projects referenced by the solution file and /// all the projects referenced by the project files. /// </summary> /// <param name="solutionFilePath">The path to the solution file to be loaded. This may be an absolute path or a path relative to the /// current working directory.</param> /// <param name="progress">An optional <see cref="IProgress{T}"/> that will receive updates as the solution is loaded.</param> /// <param name="cancellationToken">An optional <see cref="CancellationToken"/> to allow cancellation of this operation.</param> public async Task <SolutionInfo> LoadSolutionInfoAsync( string solutionFilePath, IProgress <ProjectLoadProgress> progress = null, CancellationToken cancellationToken = default) { if (solutionFilePath == null) { throw new ArgumentNullException(nameof(solutionFilePath)); } if (!_pathResolver.TryGetAbsoluteSolutionPath(solutionFilePath, baseDirectory: Directory.GetCurrentDirectory(), DiagnosticReportingMode.Throw, out var absoluteSolutionPath)) { // TryGetAbsoluteSolutionPath should throw before we get here. return(null); } using (_dataGuard.DisposableWait(cancellationToken)) { this.SetSolutionProperties(absoluteSolutionPath); } var solutionFile = MSB.Construction.SolutionFile.Parse(absoluteSolutionPath); var reportingMode = GetReportingModeForUnrecognizedProjects(); var reportingOptions = new DiagnosticReportingOptions( onPathFailure: reportingMode, onLoaderFailure: reportingMode); var projectPaths = ImmutableArray.CreateBuilder <string>(); // load all the projects foreach (var project in solutionFile.ProjectsInOrder) { cancellationToken.ThrowIfCancellationRequested(); if (project.ProjectType != MSB.Construction.SolutionProjectType.SolutionFolder) { projectPaths.Add(project.RelativePath); } } var buildManager = new ProjectBuildManager(_properties); var worker = new Worker( _workspaceServices, _diagnosticReporter, _pathResolver, _projectFileLoaderRegistry, buildManager, projectPaths.ToImmutable(), baseDirectory: Path.GetDirectoryName(absoluteSolutionPath), _properties, projectMap: null, progress, requestedProjectOptions: reportingOptions, discoveredProjectOptions: reportingOptions, preferMetadataForReferencesOfDiscoveredProjects: false); var projects = await worker.LoadAsync(cancellationToken).ConfigureAwait(false); // construct workspace from loaded project infos return(SolutionInfo.Create( SolutionId.CreateNewId(debugName: absoluteSolutionPath), version: default,
protected override ProjectFile.ProjectFile CreateProjectFile(ErgonProject project, ProjectBuildManager buildManager, DiagnosticLog log) { return(new ErgonProjectFile(this, project, buildManager, log)); }
protected abstract ProjectFile CreateProjectFile(ErgonProject project, ProjectBuildManager buildManager, DiagnosticLog log);