public bool Deploy(string taskId, IPackage package, CancellationTokenSource cancellationToken, Action<ProgressReport> reportProgress) { var unpackFolder = Path.Combine(AgentSettings.AgentProgramDataPath, _agentSettings.UnpackingLocation); var workingFolder = Path.Combine(unpackFolder, package.GetFullName()); var targetInstallationFolder = Path.Combine(_agentSettings.BaseInstallationPath, package.Id); var deploymentContext = new DeploymentContext(package, workingFolder, targetInstallationFolder, taskId); var logger = deploymentContext.GetLoggerFor(this); var frameworks = package.GetSupportedFrameworks(); foreach(var framework in frameworks) { logger.DebugFormat("package supports {0}", framework.FullName); } try { reportProgress(ProgressReport.Info(deploymentContext, this, package.Id, package.Version.Version.ToString(), taskId, "Extracting package to temp folder...")); new NuGetPackageExtractor().Extract(package, workingFolder); } catch (Exception ex) { logger.Fatal("Could not extract package", ex); } try { BeforeDeploy(deploymentContext, reportProgress); PerformDeploy(deploymentContext, reportProgress); AfterDeploy(deploymentContext, reportProgress); reportProgress(ProgressReport.Info(deploymentContext, this, package.Id, package.Version.Version.ToString(), taskId, "Deployment complete")); return true; } catch (Exception ex) { logger.Error("An error occurred", ex); reportProgress(ProgressReport.Error(deploymentContext, this, package.Id, package.Version.Version.ToString(), taskId, "Deployment failed", ex)); return false; } finally { deploymentContext.RemoveAppender(); } }