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); } }
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)); } }
private Referer(string name, PackageNode packageNode, IVersionSpec versionSpec) { PackageNode = packageNode; VersionSpec = versionSpec ?? Utility.GetEmptyVersionSpec(); Name = name ?? $"Package: {packageNode.RequiredPackage.Id}"; }
public static Referer Create(PackageNode packageNode, IVersionSpec versionSpec) => new Referer(name: null, packageNode: packageNode, versionSpec: versionSpec);