예제 #1
0
        public void AddPackage(string packageName, string packageVersion)
        {
            var id    = new PackageId(packageName, packageVersion);
            var found = false;

            foreach (var group in RestoreGroups)
            {
                if (!group.Packages.ContainsKey(id.Name))
                {
                    found = true;
                    group.Packages[id.Name] = id.Version;
                    break;
                }
            }

            if (!found)
            {
                var group = new FrameworkRestoreGroup();
                group.Packages[id.Name] = id.Version;
                RestoreGroups.Add(group);
            }
        }
예제 #2
0
        private void LoadRestoreGroup(FrameworkRestoreGroup restoreGroup, FrameworkInfo framework, TfmInfo info)
        {
            foreach (var(requestedName, _) in restoreGroup.Packages)
            {
                _context.AllPackages.GetOrAdd(requestedName, () => new Package(requestedName));
            }

            var packages = new Dictionary <string, PackageVersion>(StringComparer.OrdinalIgnoreCase);

            _assetsReader.Init(restoreGroup.ObjDirectory, framework.Tfm);
            foreach (var packageVersion in _assetsReader.GetPackages())
            {
                var version = packageVersion;
                var package = _context.AllPackages.GetOrAdd(version.Id.Name, () =>
                {
                    var p = new Package(packageVersion.Id.Name);
                    return(p);
                });

                if (package.Versions.TryGetValue(packageVersion.Id.Version, out var existingVersion))
                {
                    existingVersion.Deps[framework.Tfm] = packageVersion.Deps[framework.Tfm];
                    version = existingVersion;
                }
                else
                {
                    package.Versions[packageVersion.Id.Version] = packageVersion;
                }

                // record locally for auto version upgrades
                packages[version.Id.Name] = version;
            }

            foreach (var implicitDep in _assetsReader.GetImplicitDependencies())
            {
                var package = _context.AllPackages.GetOrAdd(implicitDep.Name, () => new Package(implicitDep.Name));
                var version = package.Versions.GetOrAdd(implicitDep.Version, () =>
                {
                    var v = new PackageVersion(implicitDep);
                    package.Versions[implicitDep.Version] = v;
                    WalkPackage(v);
                    return(v);
                });
                version.Deps.GetOrAdd(framework.Tfm, () => new List <PackageId>());
                info.ImplicitDeps.Add(package);
            }

            // now process deps for version upgrades
            foreach (var packageVersion in packages.Values)
            {
                if (!packageVersion.Deps.TryGetValue(framework.Tfm, out var deps))
                {
                    continue;
                }

                for (var i = 0; i < deps.Count; i++)
                {
                    var dep    = deps[i];
                    var actual = packages[dep.Name];

                    // nuget chose a different version for this package (likely an upgrade)
                    if (actual.Id.Version != dep.Version)
                    {
                        deps[i] = actual.Id;
                    }
                }
            }
        }