示例#1
0
 public override int GetHashCode()
 {
     unchecked
     {
         var hashCode = (PackageNode != null ? PackageNode.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (VersionSpec != null ? VersionSpec.GetHashCode() : 0);
         hashCode = (hashCode * 397) ^ (Name != null ? StringComparer.InvariantCultureIgnoreCase.GetHashCode(Name) : 0);
         return(hashCode);
     }
 }
示例#2
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));
            }
        }
示例#3
0
 private Referer(string name, PackageNode packageNode, IVersionSpec versionSpec)
 {
     PackageNode = packageNode;
     VersionSpec = versionSpec ?? Utility.GetEmptyVersionSpec();
     Name        = name ?? $"Package: {packageNode.RequiredPackage.Id}";
 }
示例#4
0
 public static Referer Create(PackageNode packageNode, IVersionSpec versionSpec) => new Referer(name: null, packageNode: packageNode, versionSpec: versionSpec);