private async Task DownloadSolution() { var archiveFile = new ArchiveFilePath(); try { if (!File.Exists(archiveFile) || CMSolutionProviderConfiguration.Current.EnableCache && File.GetLastWriteTimeUtc(archiveFile) < DateTime.UtcNow.AddMinutes(-CMSolutionProviderConfiguration.Current.CacheAgeMinutes)) { using (var stream = await _apiClient.LoadFile(new BitbucketDownloadRepoArchiveUrl())) { using (var fileStream = File.Open(archiveFile, FileMode.Create)) { await stream.CopyToAsync(fileStream); } } } var repositoryFolder = new RepositoryFolderPath(); if (Directory.Exists(repositoryFolder)) { Directory.Delete(repositoryFolder, true); } Directory.CreateDirectory(repositoryFolder); ZipFile.ExtractToDirectory(archiveFile, repositoryFolder, Encoding.UTF8); } catch (Exception e) { Console.WriteLine(e.Message); File.Delete(archiveFile); throw; } }