internal void UpdatePackages(IPackageRepository localRepository, ISharedPackageRepository sharedPackageRepository, IPackageRepository sourceRepository, IPackageConstraintProvider constraintProvider, IPackagePathResolver pathResolver, IProjectSystem project) { var projectManager = new ProjectManager(sourceRepository, pathResolver, project, localRepository) { ConstraintProvider = constraintProvider }; // Fix for work item 2411: When updating packages, we did not add packages to the shared package repository. // Consequently, when querying the package reference repository, we would have package references with no backing package files in // the shared repository. This would cause the reference repository to skip the package assuming that the entry is invalid. projectManager.PackageReferenceAdded += (sender, eventArgs) => { sharedPackageRepository.AddPackage(eventArgs.Package); }; if (Verbose) { projectManager.Logger = Console; } using (sourceRepository.StartOperation(RepositoryOperationNames.Update)) { foreach (var package in GetPackages(localRepository)) { if (localRepository.Exists(package.Id)) { try { // If the user explicitly allows prerelease or if the package being updated is prerelease we'll include prerelease versions in our list of packages // being considered for an update. bool allowPrerelease = Prerelease || !package.IsReleaseVersion(); if (Safe) { IVersionSpec safeRange = VersionUtility.GetSafeRange(package.Version); projectManager.UpdatePackageReference(package.Id, safeRange, updateDependencies: true, allowPrereleaseVersions: allowPrerelease); } else { projectManager.UpdatePackageReference(package.Id, version: null, updateDependencies: true, allowPrereleaseVersions: allowPrerelease); } } catch (InvalidOperationException e) { Console.WriteWarning(e.Message); } } } } }