public override Task <bool> UninstallPackageAsync(PackageIdentity packageIdentity, INuGetProjectContext nuGetProjectContext, CancellationToken token) { if (packageIdentity == null) { throw new ArgumentNullException("packageIdentity"); } if (nuGetProjectContext == null) { throw new ArgumentNullException("nuGetProjectContext"); } var installedPackagesList = GetInstalledPackagesList(); var packageReference = installedPackagesList.Where(p => p.PackageIdentity.Equals(packageIdentity)).FirstOrDefault(); if (packageReference == null) { nuGetProjectContext.Log(MessageLevel.Warning, Strings.PackageDoesNotExisttInPackagesConfig, packageIdentity, Path.GetFileName(FullPath)); return(Task.FromResult(false)); } try { if (installedPackagesList.Any()) { // Matching packageReference is found and is the only entry // Then just delete the packages.config file if (installedPackagesList.Count == 1 && nuGetProjectContext.ActionType == NuGetActionType.Uninstall) { FileSystemUtility.DeleteFile(FullPath, nuGetProjectContext); } else { // Remove the package reference from packages.config file using (var writer = new PackagesConfigWriter(FullPath, createNew: false)) { writer.RemovePackageEntry(packageReference); } } } } catch (PackagesConfigWriterException ex) { throw new InvalidOperationException(string.Format( CultureInfo.CurrentCulture, Strings.ErrorWritingPackagesConfig, FullPath, ex.Message)); } nuGetProjectContext.Log(MessageLevel.Info, Strings.RemovedPackageFromPackagesConfig, packageIdentity, Path.GetFileName(FullPath)); return(Task.FromResult(true)); }
public override Task <bool> UninstallPackageAsync(PackageIdentity packageIdentity, INuGetProjectContext nuGetProjectContext, CancellationToken token) { if (packageIdentity == null) { throw new ArgumentNullException("packageIdentity"); } if (nuGetProjectContext == null) { throw new ArgumentNullException("nuGetProjectContext"); } List <PackageReference> installedPackagesList = GetInstalledPackagesList(); var packageReference = installedPackagesList.Where(p => p.PackageIdentity.Equals(packageIdentity)).FirstOrDefault(); if (packageReference == null) { nuGetProjectContext.Log(MessageLevel.Warning, Strings.PackageDoesNotExisttInPackagesConfig, packageIdentity, Path.GetFileName(FullPath)); return(Task.FromResult(false)); } installedPackagesList.Remove(packageReference); if (installedPackagesList.Count > 0) { // Create new file or overwrite existing file using (var stream = FileSystemUtility.CreateFile(FullPath, nuGetProjectContext)) { var writer = new PackagesConfigWriter(stream); foreach (var pr in installedPackagesList) { writer.WritePackageEntry(pr); } writer.Close(); } } else { FileSystemUtility.DeleteFile(FullPath, nuGetProjectContext); } nuGetProjectContext.Log(MessageLevel.Info, Strings.RemovedPackageFromPackagesConfig, packageIdentity, Path.GetFileName(FullPath)); return(Task.FromResult(true)); }
public Task <bool> DeletePackage(PackageIdentity packageIdentity, INuGetProjectContext nuGetProjectContext, CancellationToken token) { var packageFilePath = GetInstalledPackageFilePath(packageIdentity); if (File.Exists(packageFilePath)) { var packageDirectoryPath = Path.GetDirectoryName(packageFilePath); using (var packageReader = new PackageArchiveReader(packageFilePath)) { var installedSatelliteFilesPair = PackageHelper.GetInstalledSatelliteFiles( packageReader, PackagePathResolver, GetPackageSaveMode(nuGetProjectContext)); var runtimePackageDirectory = installedSatelliteFilesPair.Item1; var installedSatelliteFiles = installedSatelliteFilesPair.Item2; if (!string.IsNullOrEmpty(runtimePackageDirectory)) { try { // Delete all the package files now FileSystemUtility.DeleteFiles(installedSatelliteFiles, runtimePackageDirectory, nuGetProjectContext); } catch (Exception ex) { nuGetProjectContext.Log(MessageLevel.Warning, ex.Message); // Catch all exception with delete so that the package file is always deleted } } // Get all the package files before deleting the package file var installedPackageFiles = PackageHelper.GetInstalledPackageFiles( packageReader, packageIdentity, PackagePathResolver, GetPackageSaveMode(nuGetProjectContext)); try { // Delete all the package files now FileSystemUtility.DeleteFiles(installedPackageFiles, packageDirectoryPath, nuGetProjectContext); } catch (Exception ex) { nuGetProjectContext.Log(MessageLevel.Warning, ex.Message); // Catch all exception with delete so that the package file is always deleted } } // Delete the package file FileSystemUtility.DeleteFile(packageFilePath, nuGetProjectContext); // Delete the package directory if any FileSystemUtility.DeleteDirectorySafe(packageDirectoryPath, recursive: true, nuGetProjectContext: nuGetProjectContext); // If this is the last package delete the package directory // If this is the last package delete the package directory if (!FileSystemUtility.GetFiles(Root, string.Empty, "*.*").Any() && !FileSystemUtility.GetDirectories(Root, string.Empty).Any()) { FileSystemUtility.DeleteDirectorySafe(Root, recursive: false, nuGetProjectContext: nuGetProjectContext); } } return(Task.FromResult(true)); }