public void UninstallPackage(Project project, string packageId, bool removeDependencies)
        {
            if (project == null)
            {
                throw new ArgumentNullException("project");
            }
            if (String.IsNullOrEmpty(packageId))
            {
                throw new ArgumentException(String.Format(CultureInfo.CurrentCulture, CommonResources.Argument_Cannot_Be_Null_Or_Empty, "packageId"));
            }

            IVsPackageManager packageManager = _packageManagerFactory.CreatePackageManager(_packageRepository, useFallbackForDependencies: false);
            IProjectManager   projectManager = packageManager.GetProjectManager(project);

            EventHandler <PackageOperationEventArgs> packageReferenceRemovingHandler = (sender, e) =>
            {
                _scriptExecutor.Execute(
                    e.InstallPath,
                    PowerShellScripts.Uninstall,
                    e.Package,
                    project,
                    projectManager.GetTargetFrameworkForPackage(packageId),
                    NullLogger.Instance);
            };

            try
            {
                projectManager.PackageReferenceRemoving += packageReferenceRemovingHandler;
                packageManager.UninstallPackage(projectManager, packageId, version: null, forceRemove: false, removeDependencies: removeDependencies);
            }
            finally
            {
                projectManager.PackageReferenceRemoving -= packageReferenceRemovingHandler;
            }
        }
Example #2
0
        protected override bool ExecuteCore(PackageItem item)
        {
            // because we are not removing dependencies, we don't need to walk the graph to search for script files
            bool hasScript = item.PackageIdentity.HasPowerShellScript(new string[] { "uninstall.ps1" });

            if (hasScript && !RegistryHelper.CheckIfPowerShell2Installed())
            {
                throw new InvalidOperationException(Resources.Dialog_PackageHasPSScript);
            }

            try {
                RegisterPackageOperationEvents(_packageManager);
                _packageManager.UninstallPackage(ProjectManager, item.Id, version: null, forceRemove: false, removeDependencies: false, logger: this);
            }
            finally {
                UnregisterPackageOperationEvents(_packageManager);
            }
            return(true);
        }