Esempio n. 1
0
 public void AddNugetPackage(string projectFile, string packageId, string minVersionInclusive)
 {
     AddOrUpdateRequiredPackage(
         msbuildProject: GetMsbuildProject(projectFile),
         packageId: packageId,
         referer: Referer.Create("Software Factory", Utility.GetMinVersionSpecInclusive(minVersionInclusive)));
 }
Esempio n. 2
0
        private void ConsolidateVersions(MsbuildProject project)
        {
            bool hadWork;

            do
            {
                hadWork = false;

                foreach (var node in project.PackageNodes.ToArray())
                {
                    var packageOfHighestVersion = GetPackageOfHighestVersion(node.RequiredPackage.Id);

                    if (!node.Referers.All(x => x.VersionSpec.IsSatisfiedBy(packageOfHighestVersion.Version)))
                    {
                        throw new Exception("Using solution highest package version would not satisfy all version requirements.");
                    }

                    if (node.RequiredPackage.Version != packageOfHighestVersion.Version)
                    {
                        AddOrUpdateRequiredPackage(project, node.RequiredPackage.Id, Referer.CreateFromSolutionHighestVersion(packageOfHighestVersion));
                        hadWork = true;
                    }
                }
            } while (hadWork);
        }
Esempio n. 3
0
        private MsbuildProject LoadMsbuildProject(string project)
        {
            if (string.IsNullOrWhiteSpace(project))
            {
                throw new ArgumentNullException(nameof(project));
            }

#warning this should possbily be a warning and continue, this scenario can happen when you remove a project and have not manually updated the sln file
            if (!File.Exists(project))
            {
                throw new FileNotFoundException(project);
            }

            var msBuildProject = new MsbuildProject(project);

            foreach (var package in _nugetServices.GetInstalled(project))
            {
                msBuildProject.PackageNodes.Add(PackageNode.Create(
                                                    package: package,
                                                    installedPackage: package,
                                                    referer: Referer.Create(
                                                        name: project,
                                                        versionSpec: package.Version.ToMinVersionSpecInclusive())));
            }

            return(msBuildProject);
        }
Esempio n. 4
0
 private void ValidateDependencies(MsbuildProject msbuildProject)
 {
     foreach (var packageNode in msbuildProject.PackageNodes.ToArray())
     {
         foreach (var dependency in packageNode.RequiredPackage.GetDependencies(_nugetServices.GetTargetFrameworkName(msbuildProject.Path)))
         {
             AddOrUpdateRequiredPackage(msbuildProject, dependency.Id, Referer.Create(packageNode, dependency.VersionSpec));
         }
     }
 }
Esempio n. 5
0
        public void AddReferer(Referer referer)
        {
            var existingReferer = Referers.SingleOrDefault(x => x.PackageNode == referer.PackageNode && x.Name == referer.Name);

            if (existingReferer != null)
            {
                Referers.Remove(existingReferer);
            }

            Referers.Add(referer);
        }
Esempio n. 6
0
        private PackageNode(IPackage requiredPackage, IPackage installedPackage, Referer referer)
        {
            Dependencies     = new HashSet <PackageNode>();
            Referers         = new HashSet <Referer>();
            RequiredPackage  = requiredPackage;
            InstalledPackage = installedPackage;

            if (referer != null)
            {
                Referers.Add(referer);
            }
        }
Esempio n. 7
0
        private void AddOrUpdateRequiredPackage(MsbuildProject msbuildProject, string packageId, Referer referer)
        {
            var packageOfHighestVersion = GetPackageOfHighestVersion(packageId);

            var package = packageOfHighestVersion != null && referer.VersionSpec.IsSatisfiedBy(packageOfHighestVersion.Version)
                ? packageOfHighestVersion
                : _nugetServices.GetPackage(
                packageId: packageId,
                versionSpec: referer.VersionSpec,
                allowPrereleaseVersions: _allowPreReleaseVersions);

            var packageNode = msbuildProject.PackageNodes
                              .SingleOrDefault(x => x.RequiredPackage.Id.Equals(packageId, StringComparison.InvariantCultureIgnoreCase));

            if (packageNode == null)
            {
                packageNode = PackageNode.Create(package);

                msbuildProject.PackageNodes.Add(packageNode);
            }

            packageNode.AddReferer(referer);

            if (packageOfHighestVersion != null)
            {
                packageNode.AddReferer(Referer.CreateFromSolutionHighestVersion(packageOfHighestVersion));
            }

            if (referer.VersionSpec.RequiresLowerThan(packageNode.RequiredPackage.Version))
            {
                throw new Exception("Installing package would require a downgrade.");
            }

            if (packageNode.RequiredPackage.Version < package.Version)
            {
                packageNode.UpdateRequiredPackage(package);
            }

            if (!packageNode.Referers.All(x => x.VersionSpec.IsSatisfiedBy(packageNode.RequiredPackage.Version)))
            {
                throw new Exception("Could not resolve dependencies.");
            }

            foreach (var dependency in packageNode.RequiredPackage.GetDependencies(_nugetServices.GetTargetFrameworkName(msbuildProject.Path)))
            {
                AddOrUpdateRequiredPackage(msbuildProject, dependency.Id, Referer.Create(packageNode, dependency.VersionSpec));
            }
        }
Esempio n. 8
0
 public static PackageNode Create(IPackage package, Referer referer = null, IPackage installedPackage = null) => new PackageNode(package, installedPackage, referer);
Esempio n. 9
0
 protected bool Equals(Referer other)
 {
     return(Equals(PackageNode, other.PackageNode) && Equals(VersionSpec, other.VersionSpec) && string.Equals(Name, other.Name, StringComparison.InvariantCultureIgnoreCase));
 }