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;
            }
        }