/// <summary> /// Uninstalls provided packages /// </summary> /// <param name="packages">Packages to uninstall</param> /// <param name="options">Additional options</param> /// <returns>Task</returns> public async Task UninstallPackages(ICollection <PackageId> packages, UninstallationOptions options) { Logger.Info("Uninstalling packages..."); DeploymentContext.RaiseDeploymentEvent(new BeforeMaintenanceEvent()); try { var uninstallationPlan = await PackageDeployer.PlanUninstallation( DeploymentContext.ProductConfigurationProvider.GetPackages(), packages, options.RemoveDependencies); using (var transaction = TransactionSource.NewTransaction(DeploymentContext)) { foreach (var action in uninstallationPlan.Actions) { action.Execute(transaction); } DeploymentContext.ProductConfigurationProvider.Save(); transaction.Commit(); } } catch (Exception e) { Logger.TraceException(e.Message, e); throw; } DeploymentContext.RaiseDeploymentEvent(new AfterMaintenanceEvent()); Logger.Info("Packages uninstalled."); }