Ejemplo n.º 1
0
        public LibraryDescription GetDescription(LibraryRange libraryRange, FrameworkName targetFramework)
        {
            if (!libraryRange.IsGacOrFrameworkReference)
            {
                return null;
            }

            if (!RuntimeEnvironmentHelper.IsWindows)
            {
                return null;
            }

            if (!VersionUtility.IsDesktop(targetFramework))
            {
                return null;
            }

            var name = libraryRange.Name;
            var version = libraryRange.VersionRange?.MinVersion;

            string path;
            if (!TryResolvePartialName(libraryRange.GetReferenceAssemblyName(), version, targetFramework, out path))
            {
                return null;
            }

            return new LibraryDescription(
                libraryRange,
                new LibraryIdentity(name, version, isGacOrFrameworkReference: true),
                path,
                LibraryTypes.GlobalAssemblyCache,
                Enumerable.Empty<LibraryDependency>(),
                new[] { libraryRange.GetReferenceAssemblyName() },
                framework: targetFramework);
        }
Ejemplo n.º 2
0
        public Library GetLibrary(LibraryRange libraryRange, NuGetFramework targetFramework)
        {
            var key = Tuple.Create(targetFramework, libraryRange.Name);
            LockFileTargetLibrary library = null;

            // Determine if we have a library for this target
            if (_targetLibraries.TryGetValue(key, out library) &&
                libraryRange.VersionRange.IsBetter(current: null, considering: library.Version))
            {
                var dependencies = GetDependencies(library, targetFramework);

                var description = new Library {
                    LibraryRange = libraryRange,
                    Identity = new LibraryIdentity
                    {
                        Name = library.Name,
                        Version = library.Version,
                        Type = LibraryTypes.Package
                    },
                    Resolved = true,
                    Dependencies = dependencies,

                    [KnownLibraryProperties.LockFileLibrary] = _libraries[Tuple.Create(library.Name, library.Version)],
                    [KnownLibraryProperties.LockFileTargetLibrary] = library
                };
                
                return description;
            }

            return null;
        }
        public LibraryDescription GetDescription(LibraryRange libraryRange, FrameworkName targetFramework)
        {
            if (libraryRange.IsGacOrFrameworkReference)
            {
                return null;
            }

            if (!DependencyTargets.SupportsProject(libraryRange.Target))
            {
                return null;
            }

            string name = libraryRange.Name;

            Runtime.Project project;

            // Can't find a project file with the name so bail
            if (!_projectResolver.TryResolveProject(name, out project))
            {
                return null;
            }

            // This never returns null
            var targetFrameworkInfo = project.GetCompatibleTargetFramework(targetFramework);

            var dependencies = project.Dependencies.Concat(targetFrameworkInfo.Dependencies).ToList();
            
            return new ProjectDescription(
                libraryRange,
                project,
                dependencies,
                Enumerable.Empty<string>(),
                targetFrameworkInfo,
                resolved: true);
        }
        public Library GetDescription(LibraryRange libraryRange, NuGetFramework targetFramework)
        {
            Debug.Assert(SupportsType(libraryRange.TypeConstraint));

            var name = libraryRange.Name;
            var version = libraryRange.VersionRange?.MinVersion;

            string path;
            NuGetVersion assemblyVersion;

            if (!FrameworkResolver.TryGetAssembly(name, targetFramework, out path, out assemblyVersion))
            {
                Log.LogWarning($"Unable to resolve requested assembly {libraryRange.Name}");
                return null;
            }

            if (version == null || version == assemblyVersion)
            {
                return new Library
                {
                    LibraryRange = libraryRange,
                    Identity = new LibraryIdentity
                    {
                        Name = name,
                        Version = assemblyVersion,
                        Type = LibraryTypes.Reference
                    },
                    Dependencies = Enumerable.Empty<LibraryDependency>(),

                    [KnownLibraryProperties.AssemblyPath] = path
                };
            }

            return null;
        }
Ejemplo n.º 5
0
        public async Task<WalkProviderMatch> FindLibrary(LibraryRange libraryRange, FrameworkName targetFramework, bool includeUnlisted)
        {
            var results = await _source.FindPackagesByIdAsync(libraryRange.Name);
            PackageInfo bestResult = null;
            if(!includeUnlisted)
            {
                results = results.Where(p => p.Listed);
            }

            foreach (var result in results)
            {
                if (VersionUtility.ShouldUseConsidering(
                    current: bestResult?.Version,
                    considering: result.Version,
                    ideal: libraryRange.VersionRange))
                {
                    bestResult = result;
                }
            }

            if (bestResult == null)
            {
                return null;
            }

            return new WalkProviderMatch
            {
                Library = new LibraryIdentity(bestResult.Id, bestResult.Version, isGacOrFrameworkReference: false),
                Path = bestResult.ContentUri,
                Provider = this,
            };
        }
Ejemplo n.º 6
0
        public LibraryDescription GetDescription(LibraryRange libraryRange, FrameworkName targetFramework)
        {
            if (!DependencyTargets.SupportsPackage(libraryRange.Target))
            {
                return null;
            }

            var versionRange = libraryRange.VersionRange;

            var package = FindCandidate(libraryRange.Name, versionRange);

            if (package != null)
            {
                var dependencies = GetDependencies(package, targetFramework);

                return new LibraryDescription(
                    libraryRange,
                    new LibraryIdentity(package.Id, package.Version, isGacOrFrameworkReference: false),
                    path: null,
                    type: LibraryTypes.Package,
                    dependencies: dependencies,
                    assemblies: null,
                    framework: null);
            }

            return null;
        }
        public LibraryDescription GetDescription(LibraryRange libraryRange, FrameworkName targetFramework)
        {
            if (!libraryRange.IsGacOrFrameworkReference)
            {
                return null;
            }

            var name = libraryRange.GetReferenceAssemblyName();
            var version = libraryRange.VersionRange?.MinVersion;

            string path;
            Version assemblyVersion;

            if (!FrameworkResolver.TryGetAssembly(name, targetFramework, out path, out assemblyVersion))
            {
                return null;
            }

            if (version == null || version.Version == assemblyVersion)
            {
                return new LibraryDescription(
                    libraryRange,
                    new LibraryIdentity(libraryRange.Name, new SemanticVersion(assemblyVersion), isGacOrFrameworkReference: true),
                    path,
                    LibraryTypes.ReferenceAssembly,
                    Enumerable.Empty<LibraryDependency>(),
                    new[] { name },
                    framework: targetFramework);
            }

            return null;
        }
Ejemplo n.º 8
0
        public Library GetLibrary(LibraryRange libraryRange, NuGetFramework targetFramework)
        {
            var package = FindCandidate(libraryRange.Name, libraryRange.VersionRange);

            if (package != null)
            {
                NuspecReader nuspecReader = null;
                using (var stream = File.OpenRead(package.ManifestPath))
                {
                    nuspecReader = new NuspecReader(stream);
                }

                var description = new Library
                    {
                        LibraryRange = libraryRange,
                        Identity = new LibraryIdentity
                            {
                                Name = package.Id,
                                Version = package.Version,
                                Type = LibraryTypes.Package
                            },
                        Path = package.ManifestPath,
                        Dependencies = GetDependencies(nuspecReader, targetFramework)
                    };

                description.Items["package"] = package;
                description.Items["metadata"] = nuspecReader;

                return description;
            }

            return null;
        }
Ejemplo n.º 9
0
        // DNU REFACTORING TODO: temp hack to make generated lockfile work with runtime lockfile validation
        private static string RuntimeStyleLibraryRangeToString(LibraryRange libraryRange)
        {
            var sb = new StringBuilder();
            sb.Append(libraryRange.Name);
            sb.Append(" ");

            if (libraryRange.VersionRange == null)
            {
                return sb.ToString();
            }

            var minVersion = libraryRange.VersionRange.MinVersion;
            var maxVersion = libraryRange.VersionRange.MaxVersion;

            sb.Append(">= ");

            if (libraryRange.VersionRange.IsFloating)
            {
                sb.Append(libraryRange.VersionRange.Float.ToString());
            }
            else
            {
                sb.Append(minVersion.ToString());
            }

            if (maxVersion != null)
            {
                sb.Append(libraryRange.VersionRange.IsMaxInclusive ? "<= " : "< ");
                sb.Append(maxVersion.Version.ToString());
            }

            return sb.ToString();
        }
        public LibraryDescription GetDescription(LibraryRange libraryRange, NuGetFramework targetFramework)
        {
            if (!LibraryType.ReferenceAssembly.CanSatisfyConstraint(libraryRange.Target))
            {
                return null;
            }

            var name = libraryRange.Name;
            var version = libraryRange.VersionRange?.MinVersion;

            string path;
            Version assemblyVersion;

            if (!FrameworkResolver.TryGetAssembly(name, targetFramework, out path, out assemblyVersion))
            {
                return null;
            }

            return new LibraryDescription(
                new LibraryIdentity(libraryRange.Name, new NuGetVersion(assemblyVersion), LibraryType.ReferenceAssembly),
                string.Empty, // Framework assemblies don't have hashes
                path,
                Enumerable.Empty<LibraryRange>(),
                targetFramework,
                resolved: true,
                compatible: true);
        }
Ejemplo n.º 11
0
        public async Task<WalkProviderMatch> FindLibrary(LibraryRange libraryRange, FrameworkName targetFramework)
        {
            var results = await _source.FindPackagesByIdAsync(libraryRange.Name);
            PackageInfo bestResult = null;
            foreach (var result in results)
            {
                if (VersionUtility.ShouldUseConsidering(
                    current: bestResult?.Version,
                    considering: result.Version,
                    ideal: libraryRange.VersionRange))
                {
                    bestResult = result;
                }
            }

            if (bestResult == null)
            {
                return null;
            }

            return new WalkProviderMatch
            {
                Library = new Library
                {
                    Name = bestResult.Id,
                    Version = bestResult.Version
                },
                Path = bestResult.ContentUri,
                Provider = this,
            };
        }
Ejemplo n.º 12
0
        public static int RunPackageInstall(LibraryRange dependency, string projectPath, IEnumerable<string> args)
        {
            var result = RunDnx(new List<string> { "install", dependency.Name, dependency.VersionRange.OriginalString, projectPath }.Concat(args))
                .ForwardStdErr()
                .ForwardStdOut()
                .Execute();

            return result.ExitCode;
        }
        public Library GetLibrary(LibraryRange libraryRange, NuGetFramework targetFramework)
        {
            ExternalProjectReference externalProject;
            if (!ExternalProjects.TryGetValue(libraryRange.Name, out externalProject))
            {
                // No project!
                return null;
            }

            // Fill dependencies from external project references
            var dependencies = externalProject.ExternalProjectReferences.Select(s => new LibraryDependency()
                {
                    LibraryRange = new LibraryRange()
                        {
                            Name = s,
                            VersionRange = null,
                            TypeConstraint = LibraryTypes.ExternalProject
                        },
                    Type = LibraryDependencyType.Default
                }).ToList();

            // Add dependencies from the nuget.json file
            if (!string.IsNullOrEmpty(externalProject.PackageSpecPath)
                && File.Exists(externalProject.PackageSpecPath))
            {
                PackageSpec packageSpec;
                using (var stream = new FileStream(externalProject.PackageSpecPath, FileMode.Open, FileAccess.Read, FileShare.Read))
                {
                    packageSpec = JsonPackageSpecReader.GetPackageSpec(stream, externalProject.Name, externalProject.PackageSpecPath);
                }

                // Add framework-agnostic dependencies
                dependencies.AddRange(packageSpec.Dependencies);

                // Add framework-specific dependencies
                var frameworkInfo = packageSpec.GetTargetFramework(targetFramework);
                if (frameworkInfo != null)
                {
                    dependencies.AddRange(frameworkInfo.Dependencies);
                }
            }

            // Construct the library and return it
            return new Library()
                {
                    Identity = new LibraryIdentity()
                        {
                            Name = externalProject.Name,
                            Version = new NuGetVersion("1.0.0"),
                            Type = LibraryTypes.ExternalProject
                        },
                    LibraryRange = libraryRange,
                    Dependencies = dependencies,
                    Path = externalProject.PackageSpecPath,
                    Resolved = true
                };
        }
Ejemplo n.º 14
0
 private static DependencyItem GetDependencyItem(LibraryRange dependency,
                                                 IDictionary<string, LibraryExport> exportsLookup)
 {
     return new DependencyItem
     {
         Name = dependency.Name,
         Version = exportsLookup[dependency.Name].Library.Identity.Version?.ToNormalizedString()
     };
 }
Ejemplo n.º 15
0
        public Task<LibraryIdentity> FindLibraryAsync(LibraryRange libraryRange, NuGetFramework targetFramework, CancellationToken cancellationToken)
        {
            var library = _dependencyProvider.GetLibrary(libraryRange, targetFramework);

            if (library == null)
            {
                return Task.FromResult<LibraryIdentity>(null);
            }

            return Task.FromResult(library.Identity);
        }
Ejemplo n.º 16
0
 public static LibraryDescription GetDescription(LibraryRange libraryRange, NuGetFramework targetFramework)
 {
     return new LibraryDescription(
         new LibraryIdentity(libraryRange.Name, libraryRange.VersionRange?.MinVersion, libraryRange.Target),
         hash: null,
         path: null,
         dependencies: Enumerable.Empty<LibraryRange>(),
         framework: targetFramework,
         resolved: false,
         compatible: true);
 }
Ejemplo n.º 17
0
        private string RenderDependency(LibraryRange arg)
        {
            var name = arg.Name;

            if (arg.Target == LibraryType.ReferenceAssembly)
            {
                name = $"fx/{name}";
            }

            return $"{name} {VersionUtility.RenderVersion(arg.VersionRange)}";
        }
        public LibraryDescription GetDescription(LibraryRange libraryRange, FrameworkName targetFramework)
        {
            if (libraryRange.IsGacOrFrameworkReference)
            {
                return null;
            }

            if (!DependencyTargets.SupportsProject(libraryRange.Target))
            {
                return null;
            }

            string name = libraryRange.Name;

            Runtime.Project project;

            // Can't find a project file with the name so bail
            if (!_projectResolver.TryResolveProject(name, out project))
            {
                return null;
            }

            // This never returns null
            var targetFrameworkInfo = project.GetCompatibleTargetFramework(targetFramework);

            var dependencies = project.Dependencies.Concat(targetFrameworkInfo.Dependencies).ToList();

            if (!dependencies.Any(d => d.Name.Equals(ImplicitPackagesWalkProvider.ImplicitRuntimePackageId)))
            {
                dependencies.Add(new LibraryDependency()
                {
                    LibraryRange = new LibraryRange(ImplicitPackagesWalkProvider.ImplicitRuntimePackageId, frameworkReference: false)
                    {
                        VersionRange = new SemanticVersionRange()
                        {
                            MinVersion = ImplicitPackagesWalkProvider.ImplicitRuntimePackageVersion,
                            MaxVersion = ImplicitPackagesWalkProvider.ImplicitRuntimePackageVersion,
                            IsMaxInclusive = true,
                            VersionFloatBehavior = SemanticVersionFloatBehavior.None
                        }
                    }
                });
            }

            return new ProjectDescription(
                libraryRange,
                project,
                dependencies,
                Enumerable.Empty<string>(),
                targetFrameworkInfo,
                resolved: true);
        }
Ejemplo n.º 19
0
        public static Task <GraphItem <RemoteResolveResult> > FindLibraryCachedAsync(
            ConcurrentDictionary <LibraryRangeCacheKey, Task <GraphItem <RemoteResolveResult> > > cache,
            LibraryRange libraryRange,
            NuGetFramework framework,
            string runtimeIdentifier,
            GraphEdge <RemoteResolveResult> outerEdge,
            RemoteWalkContext context,
            CancellationToken cancellationToken)
        {
            var key = new LibraryRangeCacheKey(libraryRange, framework);

            return(cache.GetOrAdd(key, (cacheKey) =>
                                  FindLibraryEntryAsync(cacheKey.LibraryRange, framework, runtimeIdentifier, outerEdge, context, cancellationToken)));
        }
Ejemplo n.º 20
0
        public Task <GraphItem> FindLibraryCached(RestoreContext context, LibraryRange libraryRange)
        {
            lock (context.GraphItemCache)
            {
                Task <GraphItem> task;
                if (!context.GraphItemCache.TryGetValue(libraryRange, out task))
                {
                    task = FindLibraryEntry(context, libraryRange);
                    context.GraphItemCache[libraryRange] = task;
                }

                return(task);
            }
        }
Ejemplo n.º 21
0
 private static RemoteMatch CreateUnresolvedMatch(LibraryRange libraryRange)
 {
     return(new RemoteMatch()
     {
         Library = new LibraryIdentity()
         {
             Name = libraryRange.Name,
             Type = LibraryType.Unresolved,
             Version = libraryRange.VersionRange?.MinVersion
         },
         Path = null,
         Provider = null
     });
 }
Ejemplo n.º 22
0
 public LibraryDescription GetDescription(LibraryRange libraryRange, FrameworkName targetFramework)
 {
     return new LibraryDescription(
         libraryRange,
         new LibraryIdentity(libraryRange.Name, libraryRange.VersionRange?.MinVersion, libraryRange.IsGacOrFrameworkReference),
         path: null,
         type: LibraryTypes.Unresolved,
         dependencies: Enumerable.Empty<LibraryDependency>(),
         assemblies: Enumerable.Empty<string>(),
         framework: null)
     {
         Resolved = false
     };
 }
Ejemplo n.º 23
0
 private Task <RestoreTargetGraph> WalkDependenciesAsync(LibraryRange projectRange,
                                                         NuGetFramework framework,
                                                         RemoteDependencyWalker walker,
                                                         RemoteWalkContext context,
                                                         CancellationToken token)
 {
     return(WalkDependenciesAsync(projectRange,
                                  framework,
                                  runtimeIdentifier: null,
                                  runtimeGraph: RuntimeGraph.Empty,
                                  walker: walker,
                                  context: context,
                                  token: token));
 }
Ejemplo n.º 24
0
        private GraphItem <ResolveResult> Resolve(
            Dictionary <LibraryRange, GraphItem <ResolveResult> > resolvedItems,
            LibraryRange packageKey,
            NuGetFramework framework)
        {
            GraphItem <ResolveResult> item;

            if (resolvedItems.TryGetValue(packageKey, out item))
            {
                return(item);
            }

            ResolveResult hit = null;

            foreach (var dependencyProvider in _dependencyProviders)
            {
                var match = dependencyProvider.GetDescription(packageKey, framework);
                if (match != null)
                {
                    hit = new ResolveResult
                    {
                        DependencyProvider = dependencyProvider,
                        LibraryDescription = match
                    };

                    break;
                }
            }

            if (hit == null)
            {
                resolvedItems[packageKey] = null;
                return(null);
            }

            if (resolvedItems.TryGetValue(hit.LibraryDescription.Identity, out item))
            {
                return(item);
            }

            item = new GraphItem <ResolveResult>(hit.LibraryDescription.Identity)
            {
                Data = hit
            };

            resolvedItems[packageKey] = item;
            resolvedItems[hit.LibraryDescription.Identity] = item;
            return(item);
        }
        private GraphItem <Library> Resolve(
            Dictionary <LibraryRange, GraphItem <Library> > resolvedItems,
            LibraryRange library,
            NuGetFramework framework)
        {
            GraphItem <Library> item;

            if (resolvedItems.TryGetValue(library, out item))
            {
                return(item);
            }

            Library hit = null;

            foreach (var dependencyProvider in _dependencyProviders)
            {
                // Skip unsupported library type
                if (!dependencyProvider.SupportsType(library.TypeConstraint))
                {
                    continue;
                }

                hit = dependencyProvider.GetLibrary(library, framework);
                if (hit != null)
                {
                    break;
                }
            }

            if (hit == null)
            {
                resolvedItems[library] = null;
                return(null);
            }

            if (resolvedItems.TryGetValue(hit.Identity, out item))
            {
                return(item);
            }

            item = new GraphItem <Library>(hit.Identity)
            {
                Data = hit
            };

            resolvedItems[library]      = item;
            resolvedItems[hit.Identity] = item;
            return(item);
        }
Ejemplo n.º 26
0
 public LibraryDescription GetDescription(LibraryRange libraryRange, FrameworkName targetFramework)
 {
     return new LibraryDescription
     {
         LibraryRange = libraryRange,
         Identity = new Library
         {
             Name = libraryRange.Name,
             IsGacOrFrameworkReference = libraryRange.IsGacOrFrameworkReference,
             Version = libraryRange.VersionRange?.MinVersion
         },
         Dependencies = Enumerable.Empty<LibraryDependency>(),
         Resolved = false
     };
 }
Ejemplo n.º 27
0
        public LibraryDescription GetDescription(LibraryRange libraryRange, FrameworkName targetFramework)
        {
            if (!libraryRange.IsGacOrFrameworkReference)
            {
                return null;
            }

            if (PlatformHelper.IsMono)
            {
                return null;
            }

            if (!VersionUtility.IsDesktop(targetFramework))
            {
                return null;
            }

            var name = libraryRange.Name;
            var version = libraryRange.VersionRange?.MinVersion;

            string path;
            if (!TryResolvePartialName(name, out path))
            {
                return null;
            }

            SemanticVersion assemblyVersion = VersionUtility.GetAssemblyVersion(path);

            if (version == null || version == assemblyVersion)
            {
                _resolvedPaths[name] = path;

                return new LibraryDescription
                {
                    LibraryRange = libraryRange,
                    Identity = new Library
                    {
                        Name = name,
                        Version = assemblyVersion,
                        IsGacOrFrameworkReference = true
                    },
                    LoadableAssemblies = new[] { name },
                    Dependencies = Enumerable.Empty<LibraryDependency>()
                };
            }

            return null;
        }
Ejemplo n.º 28
0
        private async Task <LibraryIdentity> FindLibraryCoreAsync(
            LibraryRange libraryRange,
            NuGetFramework targetFramework,
            SourceCacheContext cacheContext,
            ILogger logger,
            CancellationToken cancellationToken)
        {
            try
            {
                await EnsureResource();

                if (libraryRange.VersionRange?.MinVersion != null && libraryRange.VersionRange?.IsFloating != true)
                {
                    // first check if the exact min version exist then simply return that
                    if (await _findPackagesByIdResource.DoesPackageExistAsync(
                            libraryRange.Name, libraryRange.VersionRange.MinVersion, cacheContext, logger, cancellationToken))
                    {
                        return(new LibraryIdentity
                        {
                            Name = libraryRange.Name,
                            Version = libraryRange.VersionRange.MinVersion,
                            Type = LibraryType.Package
                        });
                    }
                }

                // Discover all versions from the feed
                var packageVersions = await GetAllVersionsAsync(libraryRange.Name, cacheContext, logger, cancellationToken);

                // Select the best match
                var packageVersion = packageVersions?.FindBestMatch(libraryRange.VersionRange, version => version);

                if (packageVersion != null)
                {
                    return(new LibraryIdentity
                    {
                        Name = libraryRange.Name,
                        Version = packageVersion,
                        Type = LibraryType.Package
                    });
                }
            }
            catch (FatalProtocolException e) when(_ignoreFailedSources)
            {
                await LogWarningAsync(libraryRange.Name, e);
            }
            return(null);
        }
Ejemplo n.º 29
0
        public Task <WalkProviderMatch> FindLibrary(LibraryRange libraryRange, FrameworkName targetFramework, bool includeUnlisted)
        {
            var description = _dependencyProvider.GetDescription(libraryRange, targetFramework);

            if (description == null)
            {
                return(Task.FromResult <WalkProviderMatch>(null));
            }

            return(Task.FromResult(new WalkProviderMatch
            {
                Library = description.Identity,
                Path = description.Path,
                Provider = this,
            }));
        }
Ejemplo n.º 30
0
        public Task<WalkProviderMatch> FindLibrary(LibraryRange libraryRange, FrameworkName targetFramework)
        {
            var description = _dependencyProvider.GetDescription(libraryRange, targetFramework);

            if (description == null)
            {
                return Task.FromResult<WalkProviderMatch>(null);
            }

            return Task.FromResult(new WalkProviderMatch
            {
                Library = description.Identity,
                Path = description.Path,
                Provider = this,
            });
        }
Ejemplo n.º 31
0
        public Task <LibraryIdentity> FindLibraryAsync(
            LibraryRange libraryRange,
            NuGetFramework targetFramework,
            SourceCacheContext cacheContext,
            ILogger logger,
            CancellationToken cancellationToken)
        {
            var library = _dependencyProvider.GetLibrary(libraryRange, targetFramework);

            if (library == null)
            {
                return(Task.FromResult <LibraryIdentity>(null));
            }

            return(Task.FromResult(library.Identity));
        }
        public Task <RemoteMatch> FindLibrary(LibraryRange libraryRange, NuGetFramework targetFramework)
        {
            var description = _dependencyProvider.GetDescription(libraryRange, targetFramework);

            if (description == null)
            {
                return(Task.FromResult <RemoteMatch>(null));
            }

            return(Task.FromResult(new RemoteMatch
            {
                Library = description.Identity,
                Path = description.Path,
                Provider = this,
            }));
        }
Ejemplo n.º 33
0
        [InlineData(LibraryDependencyTarget.Package, LibraryDependencyTarget.Assembly, false)] // different
        public void LibraryRange_Equals_TypeConstraint(
            LibraryDependencyTarget typeConstraintA,
            LibraryDependencyTarget typeConstraintB,
            bool expected)
        {
            // Arrange
            var version = VersionRange.Parse("1.0.0");
            var rangeA  = new LibraryRange("packageA", version, typeConstraintA);
            var rangeB  = new LibraryRange("packageA", version, typeConstraintB);

            // Act
            var actual = rangeA.Equals(rangeB);

            // Assert
            Assert.Equal(expected, actual);
        }
Ejemplo n.º 34
0
        private async Task <WalkProviderMatch> FindProjectMatch(RestoreContext context, string name)
        {
            var libraryRange = new LibraryRange(name, frameworkReference: false);

            foreach (var provider in context.ProjectLibraryProviders)
            {
                var match = await provider.FindLibrary(libraryRange, context.FrameworkName, includeUnlisted : false);

                if (match != null)
                {
                    return(match);
                }
            }

            return(null);
        }
Ejemplo n.º 35
0
        private static async Task <RestoreLogMessage> GetMessage(LibraryRange range, List <NuGetVersion> versions)
        {
            var token                  = CancellationToken.None;
            var logger                 = new TestLogger();
            var provider               = GetProvider("http://nuget.org/a/", versions);
            var cacheContext           = new Mock <SourceCacheContext>();
            var remoteLibraryProviders = new List <IRemoteDependencyProvider>()
            {
                provider.Object
            };
            var targetGraphName = "abc";

            var message = await UnresolvedMessages.GetMessageAsync(targetGraphName, range, remoteLibraryProviders, false, remoteLibraryProviders, cacheContext.Object, logger, token);

            return(message);
        }
Ejemplo n.º 36
0
        private static void PersistLockFile(LibraryRange tooldep, string tempPath, string projectPath)
        {
            var sourcePath = Path.Combine(tempPath, "project.lock.json");
            var targetDir  = Path.Combine(projectPath, "artifacts", "Tools", tooldep.Name);
            var targetPath = Path.Combine(targetDir, "project.lock.json");

            if (Directory.Exists(targetDir))
            {
                Directory.Delete(targetDir, true);
            }
            Directory.CreateDirectory(targetDir);

            Console.WriteLine($"Writing '{sourcePath}' to '{targetPath}'");

            File.Move(sourcePath, targetPath);
        }
Ejemplo n.º 37
0
        private async Task <RestoreTargetGraph> WalkDependencies(LibraryRange projectRange, NuGetFramework framework, string runtimeIdentifier, RuntimeGraph runtimeGraph, RemoteDependencyWalker walker, RemoteWalkContext context)
        {
            _log.LogInformation($"Restoring packages for {framework}");
            var graph = await walker.Walk(
                projectRange,
                framework,
                runtimeIdentifier,
                runtimeGraph);

            // Resolve conflicts
            _log.LogVerbose($"Resolving Conflicts for {framework}");
            bool inConflict = !graph.TryResolveConflicts();

            // Flatten and create the RestoreTargetGraph to hold the packages
            return(RestoreTargetGraph.Create(inConflict, framework, runtimeIdentifier, runtimeGraph, graph, context, _loggerFactory));
        }
Ejemplo n.º 38
0
        public async Task GivenAnUnresolvedReferenceVerifyMessage()
        {
            var range    = new LibraryRange("x", VersionRange.All, LibraryDependencyTarget.Reference);
            var versions = new List <NuGetVersion>()
            {
                NuGetVersion.Parse("1.0.0-beta"), NuGetVersion.Parse("4.4.0-beta.2+test")
            };

            var message = await GetMessage(range, versions);

            message.Code.Should().Be(NuGetLogCode.NU1100);
            message.LibraryId.Should().Be("x");
            message.Message.Should().Contain("Unable to resolve 'reference/x ' for 'abc'");
            message.TargetGraphs.Should().BeEquivalentTo(new[] { "abc" });
            message.Level.Should().Be(LogLevel.Error);
        }
Ejemplo n.º 39
0
        public async Task <LibraryIdentity> FindLibraryAsync(LibraryRange libraryRange, NuGetFramework targetFramework, CancellationToken cancellationToken)
        {
            await EnsureResource();

            IEnumerable <NuGetVersion> packageVersions = null;

            try
            {
                if (_throttle != null)
                {
                    await _throttle.WaitAsync();
                }
                packageVersions = await _findPackagesByIdResource.GetAllVersionsAsync(libraryRange.Name, cancellationToken);
            }
            catch (FatalProtocolException e) when(_ignoreFailedSources)
            {
                if (!_ignoreWarning)
                {
                    _logger.LogWarning(e.Message);
                }
                return(null);
            }
            finally
            {
                _throttle?.Release();
            }

            var packageVersion = packageVersions?.FindBestMatch(libraryRange.VersionRange, version => version);

            if (packageVersion != null)
            {
                // Use the original package identity for the library identity
                var packageIdentity = await _findPackagesByIdResource.GetOriginalIdentityAsync(
                    libraryRange.Name,
                    packageVersion,
                    cancellationToken);

                return(new LibraryIdentity
                {
                    Name = packageIdentity.Id,
                    Version = packageIdentity.Version,
                    Type = LibraryType.Package
                });
            }

            return(null);
        }
        public Library GetDescription(LibraryRange libraryRange, NuGetFramework targetFramework)
        {
            var library = FindCandidate(libraryRange);

            if (library != null)
            {
                IEnumerable <LibraryDependency> dependencies;
                bool resolved       = true;
                var  frameworkGroup = library.FrameworkGroups.FirstOrDefault(g => g.TargetFramework.Equals(targetFramework));
                if (frameworkGroup == null)
                {
                    // Library does not exist for this target framework
                    dependencies = Enumerable.Empty <LibraryDependency>();
                    resolved     = false;
                }
                else
                {
                    dependencies = GetDependencies(frameworkGroup);
                }

                var description = new Library
                {
                    LibraryRange = libraryRange,
                    Identity     = new LibraryIdentity
                    {
                        Name    = library.Name,
                        Version = library.Version,
                        Type    = LibraryTypes.Package
                    },
                    Resolved     = resolved,
                    Dependencies = dependencies,

                    [KnownLibraryProperties.LockFileLibrary]        = library,
                    [KnownLibraryProperties.LockFileFrameworkGroup] = frameworkGroup
                };

                description.Items[KnownLibraryProperties.LockFileLibrary] = library;
                if (frameworkGroup != null)
                {
                    description.Items[KnownLibraryProperties.LockFileFrameworkGroup] = frameworkGroup;
                }

                return(description);
            }

            return(null);
        }
Ejemplo n.º 41
0
        private static async Task <WalkProviderMatch> FindLibrary(
            LibraryRange libraryRange,
            IEnumerable <IWalkProvider> providers,
            Func <IWalkProvider, Task <WalkProviderMatch> > action)
        {
            var tasks = new List <Task <WalkProviderMatch> >();

            foreach (var provider in providers)
            {
                tasks.Add(action(provider));
            }

            WalkProviderMatch bestMatch = null;
            var matches = new List <WalkProviderMatch>();

            // Short circuit if we find an exact match
            while (tasks.Any())
            {
                var task = await Task.WhenAny(tasks);

                tasks.Remove(task);
                var match = await task;

                // If we found an exact match then use it
                if (libraryRange.VersionRange.VersionFloatBehavior == SemanticVersionFloatBehavior.None &&
                    match != null &&
                    match.Library.Version.Equals(libraryRange.VersionRange.MinVersion))
                {
                    return(match);
                }

                matches.Add(match);
            }

            foreach (var match in matches)
            {
                if (VersionUtility.ShouldUseConsidering(
                        current: bestMatch?.Library?.Version,
                        considering: match?.Library?.Version,
                        ideal: libraryRange.VersionRange))
                {
                    bestMatch = match;
                }
            }

            return(bestMatch);
        }
Ejemplo n.º 42
0
        public async Task <GraphNode> CreateGraphNode(RestoreContext context, LibraryRange libraryRange, Func <string, bool> predicate)
        {
            var sw = new Stopwatch();

            sw.Start();

            var node = new GraphNode
            {
                LibraryRange = libraryRange,
                Item         = await FindLibraryCached(context, libraryRange),
            };

            if (node.Item != null)
            {
                if (node.LibraryRange.VersionRange != null &&
                    node.LibraryRange.VersionRange.VersionFloatBehavior != SemanticVersionFloatBehavior.None)
                {
                    lock (context.FindLibraryCache)
                    {
                        if (!context.FindLibraryCache.ContainsKey(node.LibraryRange))
                        {
                            context.FindLibraryCache[node.LibraryRange] = Task.FromResult(node.Item);
                        }
                    }
                }

                var tasks        = new List <Task <GraphNode> >();
                var dependencies = node.Item.Dependencies ?? Enumerable.Empty <LibraryDependency>();
                foreach (var dependency in dependencies)
                {
                    if (predicate(dependency.Name))
                    {
                        tasks.Add(CreateGraphNode(context, dependency.LibraryRange, ChainPredicate(predicate, node.Item, dependency)));
                    }
                }

                while (tasks.Any())
                {
                    var task = await Task.WhenAny(tasks);

                    tasks.Remove(task);
                    var dependency = await task;
                    node.Dependencies.Add(dependency);
                }
            }
            return(node);
        }
 public Task <WalkProviderMatch> FindLibrary(LibraryRange libraryRange, FrameworkName targetFramework, bool includeUnlisted)
 {
     // If the package matches an embedded package, return it
     if (libraryRange.Name.Equals(ImplicitRuntimePackageConstants.ImplicitRuntimePackageId))
     {
         return(Task.FromResult(new WalkProviderMatch()
         {
             Provider = this,
             LibraryType = LibraryTypes.Implicit,
             Library = new LibraryIdentity(
                 ImplicitRuntimePackageConstants.ImplicitRuntimePackageId,
                 ImplicitRuntimePackageConstants.ImplicitRuntimePackageVersion,
                 isGacOrFrameworkReference: false)
         }));
     }
     return(Task.FromResult <WalkProviderMatch>(null));
 }
Ejemplo n.º 44
0
 public ProjectDescription(
     LibraryRange libraryRange,
     Project project,
     IEnumerable<LibraryRange> dependencies,
     TargetFrameworkInformation targetFrameworkInfo,
     bool resolved)
     : base(new LibraryIdentity(project.Name, project.Version, LibraryType.Project),
             string.Empty, // Projects don't have hashes
             project.ProjectFilePath,
             dependencies,
             targetFrameworkInfo.FrameworkName,
             resolved,
             compatible: true)
 {
     Project = project;
     TargetFrameworkInfo = targetFrameworkInfo;
 }
Ejemplo n.º 45
0
        public async Task GivenAnUnresolvedPackageWithPreRelVersionsAndPreRelRangeVerifyMessage()
        {
            var range    = new LibraryRange("x", VersionRange.Parse("[4.0.0-beta, 5.0.0]"), LibraryDependencyTarget.Package);
            var versions = new List <NuGetVersion>()
            {
                NuGetVersion.Parse("1.0.0-beta"), NuGetVersion.Parse("4.4.0-beta.2+test")
            };

            var message = await GetMessage(range, versions);

            message.Code.Should().Be(NuGetLogCode.NU1102);
            message.LibraryId.Should().Be("x");
            message.Message.Should().Contain("Unable to find package x with version (>= 4.0.0-beta && <= 5.0.0)");
            message.Message.Should().Contain("Found 2 version(s) in http://nuget.org/a/ [ Nearest version: 4.4.0-beta.2 ]");
            message.TargetGraphs.Should().BeEquivalentTo(new[] { "abc" });
            message.Level.Should().Be(LogLevel.Error);
        }
Ejemplo n.º 46
0
        public LibraryDescription GetDescription(LibraryRange libraryRange, FrameworkName targetFramework)
        {
            if (libraryRange.IsGacOrFrameworkReference)
            {
                return(null);
            }

            if (!DependencyTargets.SupportsProject(libraryRange.Target))
            {
                return(null);
            }

            string name = libraryRange.Name;

            Runtime.Project project;

            // Can't find a project file with the name so bail
            if (!_projectResolver.TryResolveProject(name, out project))
            {
                return(null);
            }

            // This never returns null
            var targetFrameworkInfo = project.GetCompatibleTargetFramework(targetFramework);

            var dependencies = project.Dependencies.Concat(targetFrameworkInfo.Dependencies).ToList();

            if (!dependencies.Any(d => d.Name.Equals(ImplicitRuntimePackageConstants.ImplicitRuntimePackageId)))
            {
                dependencies.Add(new LibraryDependency()
                {
                    LibraryRange = new LibraryRange(ImplicitRuntimePackageConstants.ImplicitRuntimePackageId, frameworkReference: false)
                    {
                        VersionRange = new SemanticVersionRange(ImplicitRuntimePackageConstants.ImplicitRuntimePackageVersion)
                    }
                });
            }

            return(new ProjectDescription(
                       libraryRange,
                       project,
                       dependencies,
                       Enumerable.Empty <string>(),
                       targetFrameworkInfo,
                       resolved: true));
        }
Ejemplo n.º 47
0
        public async Task GivenAnUnresolvedProjectWithNotFoundVerifyMessage()
        {
            var path     = Path.Combine(Directory.GetCurrentDirectory(), "notfound.csproj");
            var range    = new LibraryRange(path, VersionRange.All, LibraryDependencyTarget.ExternalProject);
            var versions = new List <NuGetVersion>()
            {
                NuGetVersion.Parse("1.0.0-beta"), NuGetVersion.Parse("4.4.0-beta.2+test")
            };

            var message = await GetMessage(range, versions);

            message.Code.Should().Be(NuGetLogCode.NU1104);
            message.LibraryId.Should().Be(path);
            message.Message.Should().Contain($"Unable to find project '{path}'");
            message.TargetGraphs.Should().BeEquivalentTo(new[] { "abc" });
            message.Level.Should().Be(LogLevel.Error);
        }
Ejemplo n.º 48
0
        private static async Task <RestoreLogMessage> GetMessage(LibraryRange range, List <NuGetVersion> versions)
        {
            var token             = CancellationToken.None;
            var logger            = new TestLogger();
            var provider          = GetProvider("http://nuget.org/a/", versions);
            var cacheContext      = new Mock <SourceCacheContext>();
            var remoteWalkContext = new RemoteWalkContext(cacheContext.Object, NullLogger.Instance);

            remoteWalkContext.RemoteLibraryProviders.Add(provider.Object);
            var graph = new Mock <IRestoreTargetGraph>();

            graph.SetupGet(e => e.TargetGraphName).Returns("abc");

            var message = await UnresolvedMessages.GetMessageAsync(graph.Object, range, remoteWalkContext, logger, token);

            return(message);
        }
Ejemplo n.º 49
0
 public LibraryDescription(
     LibraryRange requestedRange,
     LibraryIdentity identity,
     string path,
     string type,
     IEnumerable<LibraryDependency> dependencies,
     IEnumerable<string> assemblies,
     FrameworkName framework)
 {
     Path = path;
     RequestedRange = requestedRange;
     Identity = identity;
     Type = type;
     Dependencies = dependencies ?? Enumerable.Empty<LibraryDependency>();
     Assemblies = assemblies ?? Enumerable.Empty<string>();
     Framework = framework;
 }
Ejemplo n.º 50
0
        public async Task<GraphNode> CreateGraphNode(RestoreContext context, LibraryRange libraryRange, Func<string, bool> predicate)
        {
            var sw = new Stopwatch();
            sw.Start();

            var node = new GraphNode
            {
                LibraryRange = libraryRange,
                Item = await FindLibraryCached(context, libraryRange),
            };

            if (node.Item != null)
            {
                if (node.LibraryRange.VersionRange != null &&
                    node.LibraryRange.VersionRange.VersionFloatBehavior != SemanticVersionFloatBehavior.None)
                {
                    lock (context.FindLibraryCache)
                    {
                        if (!context.FindLibraryCache.ContainsKey(node.LibraryRange))
                        {
                            context.FindLibraryCache[node.LibraryRange] = Task.FromResult(node.Item);
                        }
                    }
                }

                var tasks = new List<Task<GraphNode>>();
                var dependencies = node.Item.Dependencies ?? Enumerable.Empty<LibraryDependency>();
                foreach (var dependency in dependencies)
                {
                    if (predicate(dependency.Name))
                    {
                        tasks.Add(CreateGraphNode(context, dependency.LibraryRange, ChainPredicate(predicate, node.Item, dependency)));
                    }
                }

                while (tasks.Any())
                {
                    var task = await Task.WhenAny(tasks);
                    tasks.Remove(task);
                    var dependency = await task;
                    node.Dependencies.Add(dependency);
                }
            }
            return node;
        }
Ejemplo n.º 51
0
        /// <summary>
        /// Asynchronously discovers all versions of a package from a source and selects the best match.
        /// </summary>
        /// <remarks>This does not download the package.</remarks>
        /// <param name="libraryRange">A library range.</param>
        /// <param name="targetFramework">A target framework.</param>
        /// <param name="cacheContext">A source cache context.</param>
        /// <param name="logger">A logger.</param>
        /// <param name="cancellationToken">A cancellation token.</param>
        /// <returns>A task that represents the asynchronous operation.
        /// The task result (<see cref="Task{TResult}.Result" />) returns a <see cref="LibraryIdentity" />
        /// instance.</returns>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="libraryRange" />
        /// is either <c>null</c> or empty.</exception>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="targetFramework" />
        /// is either <c>null</c> or empty.</exception>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="cacheContext" />
        /// is either <c>null</c> or empty.</exception>
        /// <exception cref="ArgumentNullException">Thrown if <paramref name="logger" />
        /// is either <c>null</c> or empty.</exception>
        /// <exception cref="OperationCanceledException">Thrown if <paramref name="cancellationToken" />
        /// is cancelled.</exception>
        public async Task <LibraryIdentity> FindLibraryAsync(
            LibraryRange libraryRange,
            NuGetFramework targetFramework,
            SourceCacheContext cacheContext,
            ILogger logger,
            CancellationToken cancellationToken)
        {
            if (libraryRange == null)
            {
                throw new ArgumentNullException(nameof(libraryRange));
            }

            if (targetFramework == null)
            {
                throw new ArgumentNullException(nameof(targetFramework));
            }

            if (cacheContext == null)
            {
                throw new ArgumentNullException(nameof(cacheContext));
            }

            if (logger == null)
            {
                throw new ArgumentNullException(nameof(logger));
            }

            cancellationToken.ThrowIfCancellationRequested();

            AsyncLazy <LibraryIdentity> result = null;

            var action = new AsyncLazy <LibraryIdentity>(async() =>
                                                         await FindLibraryCoreAsync(libraryRange, cacheContext, logger, cancellationToken));

            if (cacheContext.RefreshMemoryCache)
            {
                result = _libraryMatchCache.AddOrUpdate(libraryRange, action, (k, v) => action);
            }
            else
            {
                result = _libraryMatchCache.GetOrAdd(libraryRange, action);
            }

            return(await result);
        }
Ejemplo n.º 52
0
        public Task <GraphItem <RemoteResolveResult> > FindLibraryCached(
            Dictionary <LibraryRange, Task <GraphItem <RemoteResolveResult> > > cache,
            LibraryRange libraryRange,
            NuGetFramework framework,
            CancellationToken cancellationToken = default(CancellationToken))
        {
            lock (cache)
            {
                Task <GraphItem <RemoteResolveResult> > task;
                if (!cache.TryGetValue(libraryRange, out task))
                {
                    task = FindLibraryEntry(libraryRange, framework, cancellationToken);
                    cache[libraryRange] = task;
                }

                return(task);
            }
        }
Ejemplo n.º 53
0
        /// <summary>
        /// Gets the best matching PackageIdentity for the specified LibraryRange.
        /// </summary>
        /// <param name="identity">The library range to find the best patch for.</param>
        /// <param name="findPackageResource">The source repository where to match.</param>
        /// <param name="token">A optional cancellation token.</param>
        /// <returns>The best matching PackageIdentity to the specified version range.</returns>
        public static async Task <PackageIdentity> GetBestMatch(LibraryRange identity, FindPackageByIdResource findPackageResource, CancellationToken token)
        {
            if (identity == null)
            {
                throw new ArgumentNullException(nameof(identity));
            }

            if (findPackageResource == null)
            {
                throw new ArgumentNullException(nameof(findPackageResource));
            }

            var versions = await findPackageResource.GetAllVersionsAsync(identity.Name, _sourceCacheContext, _logger, token).ConfigureAwait(false);

            var bestPackageVersion = versions?.FindBestMatch(identity.VersionRange, version => version);

            return(new PackageIdentity(identity.Name, bestPackageVersion));
        }
Ejemplo n.º 54
0
 public ProjectDescription(
     LibraryRange libraryRange,
     Project project,
     IEnumerable <LibraryRange> dependencies,
     TargetFrameworkInformation targetFrameworkInfo,
     bool resolved) :
     base(
         new LibraryIdentity(project.Name, project.Version, LibraryType.Project),
         string.Empty,     // Projects don't have hashes
         project.ProjectFilePath,
         dependencies,
         targetFrameworkInfo.FrameworkName,
         resolved,
         compatible: true)
 {
     Project             = project;
     TargetFrameworkInfo = targetFrameworkInfo;
 }
Ejemplo n.º 55
0
 public ProjectDescription(
     LibraryRange libraryRange, 
     Project project, 
     IEnumerable<LibraryDependency> dependencies, 
     IEnumerable<string> assemblies, 
     FrameworkName framework, 
     bool resolved)
     : base(libraryRange,
             new LibraryIdentity(project.Name, project.Version, isGacOrFrameworkReference: false),
             project.ProjectFilePath,
             LibraryTypes.Project,
             dependencies,
             assemblies,
             framework)
 {
     Project = project;
     Resolved = resolved;
     Compatible = resolved;
 }
Ejemplo n.º 56
0
        public static Task <GraphItem <RemoteResolveResult> > FindLibraryCachedAsync(
            ConcurrentDictionary <LibraryRangeCacheKey, Task <GraphItem <RemoteResolveResult> > > cache,
            LibraryRange libraryRange,
            NuGetFramework framework,
            string runtimeIdentifier,
            RemoteWalkContext context,
            CancellationToken cancellationToken)
        {
            var key = new LibraryRangeCacheKey(libraryRange, framework);

            if (cache.TryGetValue(key, out var graphItem))
            {
                return(graphItem);
            }

            graphItem = cache.GetOrAdd(key, FindLibraryEntryAsync(key.LibraryRange, framework, runtimeIdentifier, context, cancellationToken));

            return(graphItem);
        }
Ejemplo n.º 57
0
 public PackageDescription(
     LibraryRange requestedRange, 
     PackageInfo package, 
     LockFileTargetLibrary lockFileLibrary, 
     IEnumerable<LibraryDependency> dependencies, 
     bool resolved, 
     bool compatible)
     : base(requestedRange,
           new LibraryIdentity(package.Id, package.Version, isGacOrFrameworkReference: false),
           path: null,
           type: LibraryTypes.Package,
           dependencies: dependencies,
           assemblies: Enumerable.Empty<string>(),
           framework: null)
 {
     Package = package;
     LockFileLibrary = lockFileLibrary;
     Resolved = resolved;
     Compatible = compatible;
 }
        public async Task<LibraryIdentity> FindLibraryAsync(LibraryRange libraryRange, NuGetFramework targetFramework, CancellationToken cancellationToken)
        {
            await EnsureResource();

            var packageVersions = await _findPackagesByIdResource.GetAllVersionsAsync(libraryRange.Name, cancellationToken);

            var packageVersion = packageVersions.FindBestMatch(libraryRange.VersionRange, version => version);

            if (packageVersion != null)
            {
                return new LibraryIdentity
                    {
                        Name = libraryRange.Name,
                        Version = packageVersion,
                        Type = LibraryTypes.Package
                    };
            }

            return null;
        }
Ejemplo n.º 59
0
        public LibraryDescription GetDescription(LibraryRange libraryRange, FrameworkName targetFramework)
        {
            if (!libraryRange.IsGacOrFrameworkReference)
            {
                return null;
            }

            if (!RuntimeEnvironmentHelper.IsWindows)
            {
                return null;
            }

            if (!VersionUtility.IsDesktop(targetFramework))
            {
                return null;
            }

            var name = libraryRange.Name;
            var version = libraryRange.VersionRange?.MinVersion;

            string path;
            if (!TryResolvePartialName(libraryRange.GetReferenceAssemblyName(), version, out path))
            {
                return null;
            }

            _resolvedPaths[name] = path;

            return new LibraryDescription
            {
                LibraryRange = libraryRange,
                Identity = new Library
                {
                    Name = name,
                    Version = version,
                    IsGacOrFrameworkReference = true
                },
                LoadableAssemblies = new[] { libraryRange.GetReferenceAssemblyName() },
                Dependencies = Enumerable.Empty<LibraryDependency>()
            };
        }
Ejemplo n.º 60
0
Archivo: Program.cs Proyecto: dsyme/cli
        private static void CreateDepsInPackageCache(LibraryRange toolLibrary, string projectPath)
        {
            var context = ProjectContext.Create(projectPath,
                FrameworkConstants.CommonFrameworks.DnxCore50, new[] { DefaultRid });

            var toolDescription = context.LibraryManager.GetLibraries()
                .Select(l => l as PackageDescription)
                .Where(l => l != null)
                .FirstOrDefault(l => l.Identity.Name == toolLibrary.Name);

            var depsPath = Path.Combine(
                toolDescription.Path,
                Path.GetDirectoryName(toolDescription.Target.RuntimeAssemblies.First().Path),
                toolDescription.Identity.Name + FileNameSuffixes.Deps);

            context.MakeCompilationOutputRunnable(context.ProjectDirectory, Constants.DefaultConfiguration);

            if (File.Exists(depsPath)) File.Delete(depsPath);

            File.Move(Path.Combine(context.ProjectDirectory, "bin" + FileNameSuffixes.Deps), depsPath);
        }