/// <summary> /// Attempts to remove marked package directories that were unable to be fully deleted /// during the original uninstall. /// </summary> public async Task DeleteMarkedPackageDirectoriesAsync(INuGetProjectContext projectContext) { foreach (var directory in GetPackageDirectoriesMarkedForDeletion()) { string failedPath = null; bool isFailedDir = false; Exception failedEx = null; if (await Task.Run(() => DeleteDirectoryRecursive(directory, out failedPath, out isFailedDir, out failedEx))) { continue; } if (failedPath != null) { var lockerMsg = string.Empty; var lockers = RestartManager.FindLockerProcesses(failedPath); if (lockers.Length > 0) { lockerMsg = $"\nThe {(isFailedDir ? "folder" : "file")} which threw an exception is locked by processes: {string.Join("; ", lockers.Select(l => l.strAppName))}"; } LogTo.Warning( $"Failed to deleted package directory marked for deletion: '{directory}'.\nDeleting {failedPath} threw an exception (see below).{lockerMsg}\n\n{failedEx}"); } LogTo.Warning($"Failed to delete package directory marked for deletion: '{directory}'."); } }