public async Task <IEnumerable <ProjectRestoreReference> > GetProjectReferencesAsync(
            Common.ILogger logger, CancellationToken _)
        {
            var unconfiguredProject = await _unconfiguredProject.GetValueAsync();

            IBuildDependencyProjectReferencesService service = await GetProjectReferencesService(unconfiguredProject);

            if (service == null)
            {
                return(Enumerable.Empty <ProjectRestoreReference>());
            }

            var results = new List <ProjectRestoreReference>();
            var hasMissingReferences = false;

            foreach (IUnresolvedBuildDependencyProjectReference projectReference in await service.GetUnresolvedReferencesAsync())
            {
                try
                {
                    if (await projectReference.GetReferenceOutputAssemblyAsync())
                    {
                        string childProjectPath        = projectReference.EvaluatedIncludeAsFullPath;
                        var    projectRestoreReference = new ProjectRestoreReference()
                        {
                            ProjectPath       = childProjectPath,
                            ProjectUniqueName = childProjectPath
                        };

                        results.Add(projectRestoreReference);
                    }
                }
                catch (Exception ex)
                {
                    hasMissingReferences = true;
                    logger.LogDebug(ex.ToString());
                }
            }

            if (hasMissingReferences)
            {
                // Log a generic message once per project if any items could not be resolved.
                // In most cases this can be ignored, but in the rare case where the unresolved
                // item is actually a project the restore result will be incomplete.
                var message = string.Format(
                    CultureInfo.CurrentCulture,
                    Strings.UnresolvedItemDuringProjectClosureWalk,
                    _vsProjectAdapter.UniqueName);

                logger.LogVerbose(message);
            }

            return(results);
        }
        /// <summary>
        /// Gets the project reference service for the suggested configured project if available, <see langword="null"/> otherwise.
        /// </summary>
        private static async Task <IBuildDependencyProjectReferencesService> GetProjectReferencesService(UnconfiguredProject unconfiguredProject)
        {
            IBuildDependencyProjectReferencesService service = null;

            if (unconfiguredProject != null)
            {
                ConfiguredProject configuredProject = await unconfiguredProject.GetSuggestedConfiguredProjectAsync();

                if (configuredProject != null)
                {
                    service = configuredProject.Services.ProjectReferences;
                }
            }

            return(service);
        }