Browse Source

Workaround for NuGet Core not deleting the .addin file of uninstalled package.

pull/32/head
Andreas Weizel 13 years ago
parent
commit
3aec8db722
  1. 11
      src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeNuGetPackageManager.cs
  2. 1
      src/AddIns/Misc/AddInManager2/Project/Src/Model/Interfaces/INuGetPackageManager.cs
  3. 23
      src/AddIns/Misc/AddInManager2/Project/Src/Model/NuGetPackageManager.cs
  4. 4
      src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetPackageViewModel.cs

11
src/AddIns/Misc/AddInManager2/AddInManager2.Tests/Fakes/FakeNuGetPackageManager.cs

@ -73,5 +73,16 @@ namespace ICSharpCode.AddInManager2.Tests.Fakes @@ -73,5 +73,16 @@ namespace ICSharpCode.AddInManager2.Tests.Fakes
get;
set;
}
public string LocalPackageDirectory
{
get;
set;
}
public string GetLocalPackageDirectory(IPackage package)
{
return LocalPackageDirectory;
}
}
}

1
src/AddIns/Misc/AddInManager2/Project/Src/Model/Interfaces/INuGetPackageManager.cs

@ -19,5 +19,6 @@ namespace ICSharpCode.AddInManager2.Model @@ -19,5 +19,6 @@ namespace ICSharpCode.AddInManager2.Model
}
IPackageOperationResolver CreateInstallPackageOperationResolver(bool allowPrereleaseVersions);
void ExecuteOperation(PackageOperation operation);
string GetLocalPackageDirectory(IPackage package);
}
}

23
src/AddIns/Misc/AddInManager2/Project/Src/Model/NuGetPackageManager.cs

@ -96,6 +96,11 @@ namespace ICSharpCode.AddInManager2.Model @@ -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 @@ -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 @@ -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 @@ -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);
}
}
}
}
}

4
src/AddIns/Misc/AddInManager2/Project/Src/ViewModel/NuGetPackageViewModel.cs

@ -411,9 +411,7 @@ namespace ICSharpCode.AddInManager2.ViewModel @@ -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
{

Loading…
Cancel
Save