protected override async Task <object> RemoteExecuteAsync(IRemoteOperationExecutionContext context) { this.LogInformation($"Downloading TFS artifact {this.ArtifactName} with build number \"{this.BuildNumber ?? "latest"}\" from TFS..."); var downloader = new ArtifactDownloader(this, this); using (var artifact = await downloader.DownloadAsync(this.TeamProject, this.BuildNumber, this.BuildDefinition, this.ArtifactName).ConfigureAwait(false)) { string targetDirectory = context.ResolvePath(this.TargetDirectory); if (this.ExtractFilesToTargetDirectory) { this.LogDebug("Extracting artifact files to: " + targetDirectory); AH.ExtractZip(artifact.Content, targetDirectory); } else { string path = PathEx.Combine(targetDirectory, artifact.FileName); this.LogDebug("Saving artifact as zip file to: " + path); using (var file = FileEx.Open(path, FileMode.Create, FileAccess.Write, FileShare.None, FileOptions.Asynchronous | FileOptions.SequentialScan)) { await artifact.Content.CopyToAsync(file).ConfigureAwait(false); } } } this.LogInformation("Artifact downloaded."); return(null); }