public static IEnumerable <string> FindPivots(PackageReaderBase package, string installPath) { return(from file in package.GetFiles() where Path.GetFileName(file) == PivotListFileName from pivot in ReadAllLines(package.GetStream(file)) select pivot); }
public override Task OnPackageInstalledAsync(PackageIdentity package, NuGetFramework projectFramework, PackageReaderBase packageReader, string installPath) { var packageConfiguration = Owner.packageConfiguration; var taggedPackage = IsTaggedPackage(packageReader); var relativePath = Owner.GetRelativePath(installPath); if (!packageConfiguration.Packages.Contains(package.Id)) { packageConfiguration.Packages.Add(package.Id, package.Version.ToString()); } else { packageConfiguration.Packages[package.Id].Version = package.Version.ToString(); } Owner.AddContentFolders(installPath, ExtensionsDirectory); Owner.RegisterLibraryFolders(packageReader, relativePath); Owner.RegisterAssemblyLocations(packageReader, installPath, relativePath, false); var pivots = OverlayHelper.FindPivots(packageReader, installPath).ToArray(); if (pivots.Length > 0) { var overlayManager = OverlayHelper.CreateOverlayManager(Owner.packageManager, installPath); foreach (var pivot in pivots) { var pivotPackage = overlayManager.LocalRepository.FindLocalPackage(pivot); using var pivotReader = pivotPackage.GetReader(); Owner.RegisterLibraryFolders(pivotReader, relativePath); Owner.RegisterAssemblyLocations(pivotReader, installPath, relativePath, false); } } var assemblyLocations = GetCompatibleAssemblyReferences(Owner.bootstrapperFramework, packageReader); Owner.RegisterAssemblyLocations(assemblyLocations, installPath, relativePath, taggedPackage); packageConfiguration.Save(); if (package.Id == Owner.bootstrapperPackageId && package.Version > Owner.bootstrapperVersion) { var bootstrapperFileName = Path.GetFileName(Owner.bootstrapperExePath); var bootstrapperFile = packageReader.GetFiles().FirstOrDefault(file => Path.GetFileName(file).Equals(bootstrapperFileName, StringComparison.OrdinalIgnoreCase)); if (bootstrapperFile == null) { throw new InvalidOperationException(Resources.BootstrapperMissingFromPackage); } var backupExePath = Owner.bootstrapperExePath + OldExtension; File.Move(Owner.bootstrapperExePath, backupExePath); UpdateFile(Owner.bootstrapperExePath, packageReader, bootstrapperFile); } return(base.OnPackageInstalledAsync(package, projectFramework, packageReader, installPath)); }
public static NuGetVersion FindOverlayVersion(PackageReaderBase package) { return((from file in package.GetFiles() where Path.GetFileName(file) == NuGetOverlayCommandFileName from line in ReadAllLines(package.GetStream(file)) where line.StartsWith(NuGetOverlayCommand) let version = line.Split(' ') .SkipWhile(xs => xs != NuGetOverlayVersionArgument) .Skip(1) .FirstOrDefault() select NuGetVersion.Parse(version)).FirstOrDefault()); }
void RemoveContentFolders(PackageReaderBase package, string installPath, string contentPath) { var contentDirectory = new DirectoryInfo(Path.Combine(installPath, PackagingConstants.Folders.Content, contentPath)); if (contentDirectory.Exists) { var bootstrapperContent = new DirectoryInfo(Path.Combine(bootstrapperDirectory, contentPath)); if (bootstrapperContent.Exists) { foreach (var file in package.GetFiles(Path.Combine(PackagingConstants.Folders.Content, contentPath))) { var path = file.Split(DirectorySeparators, 2)[1]; var bootstrapperFilePath = Path.Combine(bootstrapperDirectory, path); if (File.Exists(bootstrapperFilePath)) { File.Delete(bootstrapperFilePath); } } RemoveEmptyDirectories(bootstrapperContent); } } }