コード例 #1
0
            async Task <ImmutableArray <MonoDevelopMetadataReference> > CreateMetadataReferences(MonoDevelop.Projects.Project proj, CancellationToken token)
            {
                // create some default references for unsupported project types.
                if (!(proj is MonoDevelop.Projects.DotNetProject netProject))
                {
                    return(CreateDefaultMetadataReferences());
                }

                var data = new AddMetadataReferencesData {
                    Result  = new List <MonoDevelopMetadataReference> (),
                    Project = netProject,
                    Visited = new HashSet <string> (FilePath.PathComparer),
                    ConfigurationSelector = IdeApp.Workspace?.ActiveConfiguration ?? MonoDevelop.Projects.ConfigurationSelector.Default,
                    Token = token,
                };

                if (!await AddMetadataAssemblyReferences(data))
                {
                    return(ImmutableArray <MonoDevelopMetadataReference> .Empty);
                }

                if (!AddMetadataProjectReferences(data))
                {
                    return(ImmutableArray <MonoDevelopMetadataReference> .Empty);
                }
                return(data.Result.ToImmutableArray());
            }
コード例 #2
0
            async Task <bool> AddMetadataAssemblyReferences(AddMetadataReferencesData data)
            {
                try {
                    var referencedAssemblies = await data.Project.GetReferencedAssemblies(data.ConfigurationSelector, false).ConfigureAwait(false);

                    foreach (var file in referencedAssemblies)
                    {
                        if (data.Token.IsCancellationRequested)
                        {
                            return(false);
                        }

                        if (!data.Visited.Add(file.FilePath))
                        {
                            continue;
                        }

                        var aliases           = file.EnumerateAliases().ToImmutableArray();
                        var metadataReference = manager.GetOrCreateMetadataReference(file.FilePath, new MetadataReferenceProperties(aliases: aliases));
                        if (metadataReference != null)
                        {
                            data.Result.Add(metadataReference);
                        }
                    }

                    return(true);
                } catch (Exception e) {
                    LoggingService.LogError("Error while getting referenced assemblies", e);
                    // TODO: Check whether this should return false, I retained compat for now.
                    return(true);
                }
            }
コード例 #3
0
            bool AddMetadataProjectReferences(AddMetadataReferencesData data)
            {
                try {
                    var referencedProjects = data.Project.GetReferencedItems(data.ConfigurationSelector);
                    foreach (var pr in referencedProjects)
                    {
                        if (data.Token.IsCancellationRequested)
                        {
                            return(false);
                        }

                        if (!(pr is MonoDevelop.Projects.DotNetProject referencedProject) || !TypeSystemService.IsOutputTrackedProject(referencedProject))
                        {
                            continue;
                        }

                        var fileName = referencedProject.GetOutputFileName(data.ConfigurationSelector);
                        if (!data.Visited.Add(fileName))
                        {
                            continue;
                        }

                        var metadataReference = manager.GetOrCreateMetadataReference(fileName, MetadataReferenceProperties.Assembly);
                        if (metadataReference != null)
                        {
                            data.Result.Add(metadataReference);
                        }
                    }
                } catch (Exception e) {
                    LoggingService.LogError("Error while getting referenced assemblies", e);
                    // TODO: Check whether this should return false, I retained compat for now.
                    return(true);
                }

                return(true);
            }