Example #1
0
 public async Task <bool> EntityExistsAsync(string filePath)
 {
     if (IsDeferred)
     {
         return(await _workspaceService.EntityExists(filePath));
     }
     else
     {
         return(File.Exists(filePath));
     }
 }
Example #2
0
        public static async Task <DeferredProjectRestoreData> GetDeferredProjectsData(
            IDeferredProjectWorkspaceService deferredWorkspaceService,
            IEnumerable <string> deferredProjectsPath,
            CancellationToken token)
        {
            var packageReferencesDict = new Dictionary <PackageReference, List <string> >(new PackageReferenceComparer());
            var packageSpecs          = new List <PackageSpec>();

            foreach (var projectPath in deferredProjectsPath)
            {
                // packages.config
                string packagesConfigFilePath   = Path.Combine(Path.GetDirectoryName(projectPath), "packages.config");
                bool   packagesConfigFileExists = await deferredWorkspaceService.EntityExists(packagesConfigFilePath);

                if (packagesConfigFileExists)
                {
                    // read packages.config and get all package references.
                    var projectName = Path.GetFileNameWithoutExtension(projectPath);
                    using (var stream = new FileStream(packagesConfigFilePath, FileMode.Open, FileAccess.Read))
                    {
                        var reader            = new PackagesConfigReader(stream);
                        var packageReferences = reader.GetPackages();

                        foreach (var packageRef in packageReferences)
                        {
                            List <string> projectNames = null;
                            if (!packageReferencesDict.TryGetValue(packageRef, out projectNames))
                            {
                                projectNames = new List <string>();
                                packageReferencesDict.Add(packageRef, projectNames);
                            }

                            projectNames.Add(projectName);
                        }
                    }

                    // create package spec for packages.config based project
                    var packageSpec = await GetPackageSpecForPackagesConfigAsync(deferredWorkspaceService, projectPath);

                    if (packageSpec != null)
                    {
                        packageSpecs.Add(packageSpec);
                    }
                }
                else
                {
                    // project.json
                    string projectJsonFilePath   = Path.Combine(Path.GetDirectoryName(projectPath), "project.json");
                    bool   projectJsonFileExists = await deferredWorkspaceService.EntityExists(projectJsonFilePath);

                    if (projectJsonFileExists)
                    {
                        // create package spec for project.json based project
                        var packageSpec = await GetPackageSpecForProjectJsonAsync(deferredWorkspaceService, projectPath, projectJsonFilePath);

                        packageSpecs.Add(packageSpec);
                    }
                    else
                    {
                        // package references (CPS or Legacy CSProj)
                        var packageSpec = await GetPackageSpecForPackageReferencesAsync(deferredWorkspaceService, projectPath);

                        if (packageSpec != null)
                        {
                            packageSpecs.Add(packageSpec);
                        }
                    }
                }
            }

            return(new DeferredProjectRestoreData(packageReferencesDict, packageSpecs));
        }