コード例 #1
0
ファイル: OverlayHelper.cs プロジェクト: spacelabswc/bonsai
 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);
 }
コード例 #2
0
            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));
            }
コード例 #3
0
ファイル: OverlayHelper.cs プロジェクト: spacelabswc/bonsai
 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());
 }
コード例 #4
0
        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);
                }
            }
        }