void packageManager_PackageInstalling(object sender, PackageOperationEventArgs e) { var package = e.Package; var entryPoint = package.Id + BonsaiExtension; var executablePackage = package.GetContentFiles().Any(file => file.EffectivePath == entryPoint); if (executablePackage) { galleryRepository.AddPackage(package); e.Cancel = true; } else { var installPath = e.InstallPath; var pivots = OverlayHelper.FindPivots(package, installPath).ToArray(); if (pivots.Length > 0) { var overlayVersion = OverlayHelper.FindOverlayVersion(package); var overlayManager = OverlayHelper.CreateOverlayManager(packageManager.SourceRepository, installPath); overlayManager.Logger = packageManager.Logger; foreach (var pivot in pivots) { var pivotPackage = overlayManager.SourceRepository.FindPackage(pivot, overlayVersion); if (pivotPackage == null) { throw new InvalidOperationException(string.Format("The package '{0}' could not be found.", pivot)); } overlayManager.InstallPackage(pivotPackage, false, false); } } } }
void packageManager_PackageInstalled(object sender, PackageOperationEventArgs e) { var package = e.Package; var taggedPackage = IsTaggedPackage(package); var installPath = GetRelativePath(e.InstallPath); if (!packageConfiguration.Packages.Contains(package.Id)) { packageConfiguration.Packages.Add(package.Id, package.Version.ToString()); } else { packageConfiguration.Packages[package.Id].Version = package.Version.ToString(); } AddContentFolders(e.InstallPath, ExtensionsDirectory); RegisterLibraryFolders(package, installPath); RegisterAssemblyLocations(package, e.InstallPath, installPath, false); var pivots = OverlayHelper.FindPivots(package, e.InstallPath).ToArray(); if (pivots.Length > 0) { var overlayManager = OverlayHelper.CreateOverlayManager(packageManager.SourceRepository, e.InstallPath); foreach (var pivot in pivots) { var pivotPackage = overlayManager.LocalRepository.FindPackage(pivot); RegisterLibraryFolders(pivotPackage, installPath); RegisterAssemblyLocations(pivotPackage, e.InstallPath, installPath, false); } } var assemblyLocations = GetCompatibleAssemblyReferences(package).Select(reference => reference.Path); RegisterAssemblyLocations(assemblyLocations, e.InstallPath, installPath, taggedPackage); packageConfiguration.Save(); if (package.Id == bootstrapperPackageId && package.Version > bootstrapperVersion) { var bootstrapperFileName = Path.GetFileName(bootstrapperExePath); var bootstrapperFile = package.GetFiles().FirstOrDefault(file => Path.GetFileName(file.Path).Equals(bootstrapperFileName, StringComparison.OrdinalIgnoreCase)); if (bootstrapperFile == null) { throw new InvalidOperationException(Resources.BootstrapperMissingFromPackage); } var backupExePath = bootstrapperExePath + OldExtension; File.Move(bootstrapperExePath, backupExePath); UpdateFile(bootstrapperExePath, bootstrapperFile); } }
void packageManager_PackageUninstalling(object sender, PackageOperationEventArgs e) { var package = e.Package; var taggedPackage = IsTaggedPackage(package); var installPath = GetRelativePath(e.InstallPath); packageConfiguration.Packages.Remove(package.Id); RemoveContentFolders(package, e.InstallPath, ExtensionsDirectory); RemoveLibraryFolders(package, installPath); RemoveAssemblyLocations(package, e.InstallPath, false); var pivots = OverlayHelper.FindPivots(package, e.InstallPath).ToArray(); if (pivots.Length > 0) { var overlayManager = OverlayHelper.CreateOverlayManager(packageManager.SourceRepository, e.InstallPath); foreach (var pivot in pivots) { var pivotPackage = overlayManager.LocalRepository.FindPackage(pivot); RemoveLibraryFolders(pivotPackage, installPath); RemoveAssemblyLocations(pivotPackage, e.InstallPath, false); } } var assemblyLocations = GetCompatibleAssemblyReferences(package).Select(reference => reference.Path); RemoveAssemblyLocations(assemblyLocations, e.InstallPath, taggedPackage); packageConfiguration.Save(); if (pivots.Length > 0) { var overlayManager = OverlayHelper.CreateOverlayManager(packageManager.SourceRepository, e.InstallPath); overlayManager.Logger = packageManager.Logger; foreach (var pivot in pivots) { overlayManager.UninstallPackage(pivot); } } }