diff --git a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeNuGetPackageManager.cs b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeNuGetPackageManager.cs index b152b94118..bc67bb8ea6 100644 --- a/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeNuGetPackageManager.cs +++ b/src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeNuGetPackageManager.cs @@ -73,5 +73,16 @@ namespace ICSharpCode.AddInManager2.Tests.Fakes get; set; } + + public string LocalPackageDirectory + { + get; + set; + } + + public string GetLocalPackageDirectory(IPackage package) + { + return LocalPackageDirectory; + } } } diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/Model/Interfaces/INuGetPackageManager.cs b/src/AddIns/Misc/AddInManager2/Project/Src/Model/Interfaces/INuGetPackageManager.cs index cec745e433..a8e10ce45d 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/Model/Interfaces/INuGetPackageManager.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/Model/Interfaces/INuGetPackageManager.cs @@ -19,5 +19,6 @@ namespace ICSharpCode.AddInManager2.Model } IPackageOperationResolver CreateInstallPackageOperationResolver(bool allowPrereleaseVersions); void ExecuteOperation(PackageOperation operation); + string GetLocalPackageDirectory(IPackage package); } } diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/Model/NuGetPackageManager.cs b/src/AddIns/Misc/AddInManager2/Project/Src/Model/NuGetPackageManager.cs index 3afa25137c..773655bc94 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/Model/NuGetPackageManager.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/Model/NuGetPackageManager.cs @@ -96,6 +96,11 @@ namespace ICSharpCode.AddInManager2.Model _packageManager.ExecuteOperation(operation); } + public string GetLocalPackageDirectory(IPackage package) + { + return Path.Combine(PackageOutputDirectory, package.Id + "." + package.Version.Version.ToString()); + } + private IPackageManager EnsurePackageManagerInstance() { if (_packageManager != null) @@ -110,7 +115,7 @@ namespace ICSharpCode.AddInManager2.Model } // Create new package manager instance - _packageManager = new NuGetPackageManagerImplementation(_repositories.AllRegistered, _packageOutputDirectory); + _packageManager = new NuGetPackageManagerImplementation(_repositories.AllRegistered, _packageOutputDirectory, this); _packageManager.PackageInstalled += _packageEvents_NuGetPackageInstalled; _packageManager.PackageUninstalled += _packageEvents_NuGetPackageUninstalled; return _packageManager; @@ -136,9 +141,12 @@ namespace ICSharpCode.AddInManager2.Model private class NuGetPackageManagerImplementation : PackageManager { - public NuGetPackageManagerImplementation(IPackageRepository sourceRepository, string path) + private INuGetPackageManager _internalPackageManager; + + public NuGetPackageManagerImplementation(IPackageRepository sourceRepository, string path, INuGetPackageManager internalPackageManager) : base(sourceRepository, path) { + _internalPackageManager = internalPackageManager; } public void ExecuteOperation(PackageOperation operation) @@ -146,6 +154,17 @@ namespace ICSharpCode.AddInManager2.Model // Allow to call this method from outside of the class base.Execute(operation); } + + public override void UninstallPackage(IPackage package, bool forceRemove, bool removeDependencies) + { + base.UninstallPackage(package, forceRemove, removeDependencies); + string localPackageDirectory = _internalPackageManager.GetLocalPackageDirectory(package); + if (Directory.Exists(localPackageDirectory)) + { + // Directory still exists after removing the package -> try to delete it explicitly + Directory.Delete(localPackageDirectory, true); + } + } } } } diff --git a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetPackageViewModel.cs b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetPackageViewModel.cs index e3866f9adc..5dfd476bb0 100644 --- a/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetPackageViewModel.cs +++ b/src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetPackageViewModel.cs @@ -411,9 +411,7 @@ namespace ICSharpCode.AddInManager2.ViewModel if (IsPackageInstalled()) { // Package is already installed, but seems to be not registered as SD AddIn - string assumedPackageOutputDir = - Path.Combine(AddInManager.NuGet.PackageOutputDirectory, _package.Id + "." + _package.Version.Version.ToString()); - AddInManager.Setup.InstallAddIn(_package, assumedPackageOutputDir); + AddInManager.Setup.InstallAddIn(_package, AddInManager.NuGet.GetLocalPackageDirectory(_package)); } else {