public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            var    path = (string)value;
            string name = Path.GetFileName(path);

            string[] parts = path.Split('\\');
            if (parts.Length == 2 &&
                WellknownPackageFolders.Any(s => s.Equals(parts[0], StringComparison.OrdinalIgnoreCase)))
            {
                FrameworkName frameworkName;
                try
                {
                    frameworkName = VersionUtility.ParseFrameworkName(name);
                }
                catch (ArgumentException)
                {
                    if (parts[0].Equals("lib", StringComparison.OrdinalIgnoreCase) ||
                        parts[0].Equals("build", StringComparison.OrdinalIgnoreCase))
                    {
                        return(" (Invalid framework)");
                    }
                    else
                    {
                        return(String.Empty);
                    }
                }

                if (frameworkName != VersionUtility.UnsupportedFrameworkName)
                {
                    return(" (" + frameworkName + ")");
                }
                else if (!parts[0].Equals("content", StringComparison.OrdinalIgnoreCase))
                {
                    return(" (Unrecognized framework)");
                }
            }

            return(String.Empty);
        }
Example #2
0
        public static List <IPackageFile> CreateFiles(IEnumerable <string> fileNames, string directory = "")
        {
            var files = new List <IPackageFile>();

            foreach (var fileName in fileNames)
            {
                string path     = Path.Combine(directory, fileName);
                var    mockFile = new Mock <IPackageFile>();
                mockFile.Setup(m => m.Path).Returns(path);
                mockFile.Setup(m => m.GetStream()).Returns(() => new MemoryStream(Encoding.Default.GetBytes(path)));

                string        effectivePath;
                FrameworkName fn = VersionUtility.ParseFrameworkNameFromFilePath(path, out effectivePath);
                mockFile.Setup(m => m.TargetFramework).Returns(fn);
                mockFile.Setup(m => m.EffectivePath).Returns(effectivePath);
                mockFile.Setup(m => m.SupportedFrameworks).Returns(
                    fn == null ? new FrameworkName[0] : new FrameworkName[] { fn });

                files.Add(mockFile.Object);
            }
            return(files);
        }
            public void ShouldNotInstallExistingPackages()
            {
                var logger   = new Mock <ILog>();
                var provider = new Mock <IInstallationProvider>();

                provider.Setup(
                    i => i.IsInstalled(It.Is <IPackageReference>(x => x.PackageId == "testId"), It.IsAny <bool>()))
                .Returns(true);

                var references = new List <IPackageReference>
                {
                    new PackageReference("testId", VersionUtility.ParseFrameworkName("net40"), new Version("3.0")),
                    new PackageReference("testId2", VersionUtility.ParseFrameworkName("net40"), new Version("4.0")),
                    new PackageReference("testId3", VersionUtility.ParseFrameworkName("net40"), new Version("5.0"))
                };

                var installer = new PackageInstaller(provider.Object, logger.Object);

                installer.InstallPackages(references);

                provider.Verify(i => i.InstallPackage(It.Is <IPackageReference>(x => x.PackageId == "testId"), It.IsAny <bool>()), Times.Never());
            }
Example #4
0
        /// <summary>
        /// Filters the provided list of items, returning only those items compatible with the given project framework.
        /// </summary>
        /// <typeparam name="T">the type of items being filtered</typeparam>
        /// <param name="projectFramework">The project framework.</param>
        /// <param name="items">The items.</param>
        /// <returns>The compatible items. Empty if try is unsuccessful.</returns>
        /// <exception cref="System.ArgumentNullException">
        /// projectFramework or items
        /// </exception>
        public IEnumerable <T> GetCompatibleItems <T>(FrameworkName projectFramework, IEnumerable <T> items)
            where T : IFrameworkTargetable
        {
            if (projectFramework == null)
            {
                throw new ArgumentNullException("projectFramework");
            }
            if (items == null)
            {
                throw new ArgumentNullException("items");
            }

            var nugetItems = items.Select(item => new FrameworkTargetableWrapper <T>(item)).ToArray();
            IEnumerable <FrameworkTargetableWrapper <T> > compatibleNugetItems;

            if (VersionUtility.TryGetCompatibleItems(projectFramework, nugetItems, out compatibleNugetItems))
            {
                return(compatibleNugetItems.Select(item => item.WrappedItem));
            }

            return(Enumerable.Empty <T>());
        }
            public void ShouldShowErrorIfOneOfPackagesFail()
            {
                var provider = new Mock <IInstallationProvider>();

                provider.Setup(
                    i => i.InstallPackage(It.Is <IPackageReference>(x => x.PackageId == "testId"), It.IsAny <bool>()))
                .Throws <Exception>();

                var references = new List <IPackageReference>
                {
                    new PackageReference("testId", VersionUtility.ParseFrameworkName("net40"), new Version("3.0")),
                    new PackageReference("testId2", VersionUtility.ParseFrameworkName("net40"), new Version("4.0")),
                    new PackageReference("testId3", VersionUtility.ParseFrameworkName("net40"), new Version("5.0"))
                };

                var installer = new PackageInstaller(provider.Object, new TestLogProvider());
                var exception = Record.Exception(() => installer.InstallPackages(references, true));

                provider.Verify(i => i.InstallPackage(It.IsAny <IPackageReference>(), It.IsAny <bool>()), Times.Exactly(3));
                exception.ShouldBeType <AggregateException>();
                ((AggregateException)exception).InnerExceptions.Count.ShouldEqual(1);
            }
Example #6
0
            public void ShouldShowSuccessIfNoneOfPackagesFail()
            {
                var callbacks = new List <string>();
                var provider  = new Mock <IInstallationProvider>();

                provider.Setup(
                    i => i.InstallPackage(It.IsAny <IPackageReference>(), It.IsAny <bool>(), It.IsAny <Action <string> >()))
                .Returns(true);

                var references = new List <IPackageReference> {
                    new PackageReference("testId", VersionUtility.ParseFrameworkName("net40"), new Version("3.0")),
                    new PackageReference("testId2", VersionUtility.ParseFrameworkName("net40"), new Version("4.0")),
                    new PackageReference("testId3", VersionUtility.ParseFrameworkName("net40"), new Version("5.0"))
                };

                var installer = new PackageInstaller(provider.Object);

                installer.InstallPackages(references, true, msg => callbacks.Add(msg));

                callbacks.Count.ShouldEqual(1);
                callbacks.Count(x => x.EndsWith("successful.")).ShouldEqual(1);
            }
        public void GetDescriptionReturnsCorrectResults(string name, string version, string framework, string path, bool found)
        {
            var libraryRange = new LibraryRange(name, frameworkReference: true)
            {
                VersionRange = VersionUtility.ParseVersionRange(version)
            };

            var frameworkName = FrameworkNameHelper.ParseFrameworkName(framework);
            var resolver      = new GacDependencyResolver();
            var library       = resolver.GetDescription(libraryRange, frameworkName);

            if (found)
            {
                Assert.NotNull(library);
                Assert.Equal(SemanticVersion.Parse(version), library.Identity.Version);
                Assert.Equal(Environment.ExpandEnvironmentVariables(path), library.Path);
            }
            else
            {
                Assert.Null(library);
            }
        }
Example #8
0
        public LibraryDescription GetDescription(LibraryRange libraryRange, FrameworkName targetFramework)
        {
            if (!libraryRange.IsGacOrFrameworkReference)
            {
                return(null);
            }

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

            string path;

            if (!FrameworkResolver.TryGetAssembly(name, targetFramework, 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);
        }
Example #9
0
            public void WhenManyPackagesAreMatchedAllMatchingDllsShouldBeReturned()
            {
                _packageIds.Add(new PackageReference("testId2", VersionUtility.ParseFrameworkName("net40"), new Version("3.0")));
                var p = new Mock <IPackageObject>();

                p.Setup(i => i.GetCompatibleDlls(It.IsAny <FrameworkName>()))
                .Returns(new List <string> {
                    "test3.dll", "test4.dll"
                });
                p.SetupGet(i => i.Id).Returns("testId2");
                p.SetupGet(i => i.Version).Returns(new Version("3.0"));
                p.SetupGet(i => i.TextVersion).Returns("3.0");
                p.SetupGet(i => i.FullName).Returns(_package.Object.Id + "." + _package.Object.Version);

                _packageContainer.Setup(i => i.FindPackage(It.IsAny <string>(), It.Is <IPackageReference>(x => x.PackageId == "testId2"))).Returns(p.Object);

                var resolver = new PackageAssemblyResolver(_filesystem.Object, _packageContainer.Object);
                var found    = resolver.GetAssemblyNames(_workingDirectory).ToList();

                found.ShouldNotBeEmpty();
                found.Count.ShouldEqual(4);
            }
 public NuGetPackage()
 {
     myVersionSpec = new Lazy <Func <IPackage, bool> >(
         () =>
     {
         try
         {
             var spec = VersionSpec;
             if (string.IsNullOrWhiteSpace(spec))
             {
                 return(True);
             }
             var pSpec = VersionUtility.ParseVersionSpec(spec);
             return(xx => Enumerable.Any(new[] { xx }.FindByVersion(pSpec)));
         }
         catch (Exception e)
         {
             Console.Out.WriteLine("Error: " + e);
             return(True);
         }
     });
 }
Example #11
0
 public async Task <IEnumerable <LibraryDependency> > GetDependencies(WalkProviderMatch match, FrameworkName targetFramework)
 {
     using (var stream = await _source.OpenNuspecStreamAsync(new PackageInfo
     {
         Id = match.Library.Name,
         Version = match.Library.Version,
         ContentUri = match.Path
     }))
     {
         var metadata = (IPackageMetadata)Manifest.ReadFrom(stream, validateSchema: false).Metadata;
         IEnumerable <PackageDependencySet> dependencySet;
         if (VersionUtility.TryGetCompatibleItems(targetFramework, metadata.DependencySets, out dependencySet))
         {
             return(dependencySet
                    .SelectMany(x => x.Dependencies)
                    .Select(x => new LibraryDependency(name: x.Id,
                                                       version: x.VersionSpec != null ? x.VersionSpec.MinVersion : null))
                    .ToList());
         }
     }
     return(Enumerable.Empty <LibraryDependency>());
 }
Example #12
0
        private bool CheckAlreadyDownloaded(PackageRequest request, List <InstalledPackage> installedPackages)
        {
            var existing = installedPackages.FirstOrDefault(op => string.Equals(op.Id, request.Id, StringComparison.OrdinalIgnoreCase));

            if (existing == null)
            {
                return(false);
            }

            var requestVersionsRange = VersionUtility.ParseVersionSpec(request.VersionsRange);
            var existingVersion      = SemanticVersion.Parse(existing.Version);

            if (!requestVersionsRange.Satisfies(existingVersion))
            {
                DependencyError(string.Format(
                                    "Incompatible package version '{0}, version {1}, requested by {2}' conflicts with previously downloaded package '{3}, version {4}, requested by {5} ({6})'.",
                                    request.Id, request.VersionsRange ?? "not specified", request.RequestedBy,
                                    existing.Id, existing.Version, existing.Request.RequestedBy, existing.Request.VersionsRange));
            }

            return(true);
        }
Example #13
0
        private IEnumerable <Package> GetMatchingPackages(string packageRegistrationId, string requiredVersionSpec)
        {
            var packageRegistrationRepository = GetService <IEntityRepository <PackageRegistration> >();
            var candidatePackages             = packageRegistrationRepository.GetAll()
                                                .Include(pr => pr.Packages)
                                                .Where(pr => pr.Id.Equals(packageRegistrationId, StringComparison.OrdinalIgnoreCase))
                                                .SelectMany(pr => pr.Packages)
                                                .Include(p => p.PackageRegistration)
                                                .ToList();

            if (requiredVersionSpec == null)
            {
                return(candidatePackages);
            }

            var versionSpec  = VersionUtility.ParseVersionSpec(requiredVersionSpec);
            var dependencies = from p in candidatePackages
                               where versionSpec.Satisfies(new SemanticVersion(p.Version))
                               select p;

            return(dependencies);
        }
            public void ShouldShowSuccessIfNoneOfPackagesFail()
            {
                var logger   = new Mock <ILog>();
                var provider = new Mock <IInstallationProvider>();

                provider.Setup(
                    i => i.InstallPackage(It.IsAny <IPackageReference>(), It.IsAny <bool>()))
                .Returns(true);

                var references = new List <IPackageReference>
                {
                    new PackageReference("testId", VersionUtility.ParseFrameworkName("net40"), new Version("3.0")),
                    new PackageReference("testId2", VersionUtility.ParseFrameworkName("net40"), new Version("4.0")),
                    new PackageReference("testId3", VersionUtility.ParseFrameworkName("net40"), new Version("5.0"))
                };

                var installer = new PackageInstaller(provider.Object, logger.Object);

                installer.InstallPackages(references, true);

                logger.Verify(i => i.Info(It.Is <string>(x => x.EndsWith("successful."))), Times.Once());
            }
Example #15
0
        public void GetAllPossibleVersionsFourDigitsWithTrailingZeros()
        {
            // Arrange
            var expectedVersions = new[] {
                new SemanticVersion("1.1"),
                new SemanticVersion("1.1.0"),
                new SemanticVersion("1.1.0.0"),
            };
            var expectedVersionStrings = new[]
            {
                "1.1",
                "1.1.0",
                "1.1.0.0",
            };

            // Act
            var versions = VersionUtility.GetPossibleVersions(new SemanticVersion("1.1.0.0")).ToList();

            // Assert
            Assert.Equal(expectedVersions, versions);
            Assert.Equal(expectedVersionStrings, versions.Select(v => v.ToString()));
        }
Example #16
0
        private async Task <WalkProviderMatch> FindLibraryByVersion(RestoreContext context, LibraryRange libraryRange, IEnumerable <IWalkProvider> providers)
        {
            if (libraryRange.VersionRange.VersionFloatBehavior != SemanticVersionFloatBehavior.None)
            {
                // Don't optimize the non http path for floating versions or we'll miss things
                return(await FindLibrary(libraryRange, providers, provider => provider.FindLibrary(libraryRange, context.FrameworkName, includeUnlisted: false)));
            }

            // Try the non http sources first
            // non-http sources don't support list/unlist so set includeUnlisted to true
            var nonHttpMatch = await FindLibrary(libraryRange, providers.Where(p => !p.IsHttp), provider => provider.FindLibrary(libraryRange, context.FrameworkName, includeUnlisted: true));

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

            // Otherwise try listed packages on http sources
            var httpMatch = await FindLibrary(libraryRange, providers.Where(p => p.IsHttp), provider => provider.FindLibrary(libraryRange, context.FrameworkName, includeUnlisted: false));

            // If the http sources failed to find a listed package that matched, try unlisted packages
            if (httpMatch == null)
            {
                httpMatch = await FindLibrary(libraryRange, providers.Where(p => p.IsHttp), provider => provider.FindLibrary(libraryRange, context.FrameworkName, includeUnlisted: true));
            }

            // Pick the best match of the 2
            if (VersionUtility.ShouldUseConsidering(
                    nonHttpMatch?.Library?.Version,
                    httpMatch?.Library.Version,
                    libraryRange.VersionRange))
            {
                return(httpMatch);
            }

            return(nonHttpMatch);
        }
Example #17
0
        private static IEnumerable <Package> GetUpdates(
            IEnumerable <Package> packages,
            Dictionary <string, Tuple <SemanticVersion, IVersionSpec> > versionLookup,
            IEnumerable <FrameworkName> targetFrameworkValues,
            bool includeAllVersions)
        {
            var updates = packages.AsEnumerable()
                          .Where(
                p =>
            {
                // For each package, if the version is higher than the client version and we satisty the target framework, return it.
                // TODO: We could optimize for the includeAllVersions case here by short circuiting the operation once we've encountered the highest version
                // for a given Id
                var version = SemanticVersion.Parse(p.Version);
                Tuple <SemanticVersion, IVersionSpec> versionTuple;

                if (versionLookup.TryGetValue(p.PackageRegistration.Id, out versionTuple))
                {
                    SemanticVersion clientVersion  = versionTuple.Item1;
                    var supportedPackageFrameworks = p.SupportedFrameworks.Select(f => f.FrameworkName);

                    IVersionSpec versionConstraint = versionTuple.Item2;

                    return((version > clientVersion) &&
                           (targetFrameworkValues == null ||
                            targetFrameworkValues.Any(s => VersionUtility.IsCompatible(s, supportedPackageFrameworks))) &&
                           (versionConstraint == null || versionConstraint.Satisfies(version)));
                }
                return(false);
            });

            if (!includeAllVersions)
            {
                return(updates.GroupBy(p => p.PackageRegistration.Id)
                       .Select(g => g.OrderByDescending(p => SemanticVersion.Parse(p.Version)).First()));
            }
            return(updates);
        }
            public GetAssemblyNamesMethod()
            {
                _workingDirectory = Path.GetTempPath();

                _filesystem = new Mock <IFileSystem>();

                _filesystem.SetupGet(i => i.CurrentDirectory).Returns(_workingDirectory);
                _filesystem.SetupGet(i => i.PackagesFile).Returns("packages.config");
                _filesystem.SetupGet(i => i.PackagesFolder).Returns("packages");

                _filesystem.Setup(i => i.DirectoryExists(It.IsAny <string>())).Returns(true);
                _filesystem.Setup(i => i.FileExists(It.IsAny <string>())).Returns(true);

                _logger = new Mock <ILog>();

                _package = new Mock <IPackageObject>();
                _package.Setup(i => i.GetCompatibleDlls(It.IsAny <FrameworkName>()))
                .Returns(new List <string> {
                    "test.dll", "test2.dll"
                });
                _package.SetupGet(i => i.Id).Returns("id");
                _package.SetupGet(i => i.Version).Returns(new Version("3.0"));
                _package.SetupGet(i => i.TextVersion).Returns("3.0");
                _package.SetupGet(i => i.FullName).Returns(_package.Object.Id + "." + _package.Object.Version);
                _package.SetupGet(i => i.FrameworkAssemblies).Returns(new[] { "System.Net.Http", "System.ComponentModel" });

                _packageIds = new List <IPackageReference>
                {
                    new PackageReference("testId", VersionUtility.ParseFrameworkName("net40"), new Version("3.0"))
                };

                _packageContainer = new Mock <IPackageContainer>();
                _packageContainer.Setup(i => i.FindReferences(It.IsAny <string>())).Returns(_packageIds);
                _packageContainer.Setup(i => i.FindPackage(It.IsAny <string>(), It.IsAny <IPackageReference>())).Returns(_package.Object);

                _assemblyUtility = new Mock <IAssemblyUtility>();
                _assemblyUtility.Setup(u => u.IsManagedAssembly(It.IsAny <string>())).Returns(true);
            }
Example #19
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,
                       new LibraryIdentity(name, version, isGacOrFrameworkReference: true),
                       path,
                       LibraryTypes.GlobalAssemblyCache,
                       Enumerable.Empty <LibraryDependency>(),
                       new[] { libraryRange.GetReferenceAssemblyName() },
                       framework: null));
        }
        private bool ExecuteCore(
            string fullScriptPath,
            string installPath,
            IPackage package,
            Project project,
            FrameworkName targetFramework,
            ILogger logger,
            IPackageFile scriptFile)
        {
            if (File.Exists(fullScriptPath))
            {
                if (project != null && scriptFile != null)
                {
                    // targetFramework can be null for unknown project types
                    string shortFramework = targetFramework == null ? string.Empty : VersionUtility.GetShortFrameworkName(targetFramework);

                    logger.Log(MessageLevel.Debug, NuGetResources.Debug_TargetFrameworkInfoPrefix, package.GetFullName(),
                               project.Name, shortFramework);

                    logger.Log(MessageLevel.Debug, NuGetResources.Debug_TargetFrameworkInfo_PowershellScripts,
                               Path.GetDirectoryName(scriptFile.Path), VersionUtility.GetTargetFrameworkLogString(scriptFile.TargetFramework));
                }

                string toolsPath  = Path.GetDirectoryName(fullScriptPath);
                string logMessage = String.Format(CultureInfo.CurrentCulture, VsResources.ExecutingScript, fullScriptPath);

                // logging to both the Output window and progress window.
                logger.Log(MessageLevel.Info, logMessage);

                IConsole console = OutputConsoleProvider.CreateOutputConsole(requirePowerShellHost: true);
                Host.Execute(console,
                             "$__pc_args=@(); $input|%{$__pc_args+=$_}; & " + PathHelper.EscapePSPath(fullScriptPath) + " $__pc_args[0] $__pc_args[1] $__pc_args[2] $__pc_args[3]; Remove-Variable __pc_args -Scope 0",
                             new object[] { installPath, toolsPath, package, project });

                return(true);
            }
            return(false);
        }
        private static MemoryStream GetPackageStream(
            IEnumerable <IPackageFile> files             = null,
            IEnumerable <PackageReferenceSet> references = null)
        {
            var builder = new PackageBuilder();

            builder.Id      = "Package";
            builder.Version = new SemanticVersion("1.0");
            builder.Authors.Add("dotnetjunky");
            builder.Description  = "This is a test package";
            builder.ReleaseNotes = "This is a release note.";
            builder.Copyright    = "Copyright";
            if (files != null)
            {
                builder.Files.AddRange(files);
            }
            else
            {
                builder.Files.AddRange(
                    PackageUtility.CreateFiles(
                        new[] { PathFixUtility.FixPath(@"lib\40\A.dll"), PathFixUtility.FixPath(@"content\foo") }
                        ));
            }

            builder.FrameworkReferences.AddRange(
                new[] { new FrameworkAssemblyReference("A", new[] { VersionUtility.ParseFrameworkName("sl50") }),
                        new FrameworkAssemblyReference("B", new[] { VersionUtility.ParseFrameworkName("windows8") }) });
            if (references != null)
            {
                builder.PackageAssemblyReferences.AddRange(references);
            }

            var ms = new MemoryStream();

            builder.Save(ms);
            ms.Seek(0, SeekOrigin.Begin);
            return(ms);
        }
Example #22
0
        private static Tuple <Version, string> FindUpgradeVersion(string appSymbolicNameFolder, Version currentVersion)
        {
            Version version = null;

            if (Directory.Exists(appSymbolicNameFolder))
            {
                string[] directories = Directory.GetDirectories(appSymbolicNameFolder);
                string   str         = string.Empty;
                string[] strArray2   = directories;
                int      index       = 0;
                while (true)
                {
                    if (index >= strArray2.Length)
                    {
                        break;
                    }
                    string path = strArray2[index];
                    try
                    {
                        Version newVersion = new Version(new DirectoryInfo(path).Name);
                        if (VersionUtility.Compatible(currentVersion, newVersion) && ((version == null) || (newVersion > version)))
                        {
                            version = newVersion;
                            str     = path;
                        }
                    }
                    catch
                    {
                    }
                    index++;
                }
                if (version != null)
                {
                    return(new Tuple <Version, string>(version, str));
                }
            }
            return(null);
        }
Example #23
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 Library
                {
                    Name = bestResult.Id,
                    Version = bestResult.Version
                },
                Path = bestResult.ContentUri,
                Provider = this,
            });
        }
Example #24
0
        public void Task_ReadPackagesConfig_ParseProjectoryConfig()
        {
            var projectPath = Assets.GetScenarioFilePath("Task_ReadPackagesConfig_ParseProjectoryConfig", @"A.csproj");

            var task = new ReadPackagesConfig();

            task.ProjectPath = projectPath;
            var result = task.Execute();

            var expectedVersionConstraint = VersionUtility.ParseVersionSpec("[1,2]").ToString();

            Assert.True(result);
            var fodyItem = new AssertTaskItem(task.PackageReferences, "Fody", items => Assert.Single(items))
            {
                { "Version", "1.25.0" },
                { "TargetFramework", "net45" },
                { "VersionConstraint", expectedVersionConstraint },
                { "RequireReinstallation", bool.FalseString },
                { "IsDevelopmentDependency", bool.TrueString },
            };

            Assert.Single(fodyItem);
        }
Example #25
0
        void extractDependentPackages(IEnumerable <IPackage> dependencies, DirectoryInfo tempPath, FrameworkName framework)
        {
            dependencies.ForEach(pkg => {
                this.Log().Info("Scanning {0}", pkg.Id);

                pkg.GetLibFiles().ForEach(file => {
                    var outPath = new FileInfo(Path.Combine(tempPath.FullName, file.Path));

                    if (!VersionUtility.IsCompatible(framework, new[] { file.TargetFramework }))
                    {
                        this.Log().Info("Ignoring {0} as the target framework is not compatible", outPath);
                        return;
                    }

                    Directory.CreateDirectory(outPath.Directory.FullName);

                    using (var of = File.Create(outPath.FullName)) {
                        this.Log().Info("Writing {0} to {1}", file.Path, outPath);
                        file.GetStream().CopyTo(of);
                    }
                });
            });
        }
Example #26
0
        private bool WrapAssembly()
        {
            if (string.IsNullOrEmpty(Framework))
            {
                Reports.Error.WriteLine("Please specify framework when wrapping an assembly", Framework.Red().Bold());
                return false;
            }

            var frameworkName = VersionUtility.ParseFrameworkName(Framework);
            if (VersionUtility.UnsupportedFrameworkName.Equals(frameworkName))
            {
                Reports.Error.WriteLine("The framework '{0}' is not supported", Framework.Red().Bold());
                return false;
            }

            var rootDir = ResolveRootDirectory(Directory.GetCurrentDirectory());
            var wrapRoot = Path.Combine(rootDir, WrapRootName);
            EmitAssemblyWrapper(wrapRoot, frameworkName, InputFilePath);

            AddWrapFolderToGlobalJson(rootDir);

            return true;
        }
Example #27
0
            public static FrameworkName GetFrameworkNameForRuntime(string runtime)
            {
                var parts = runtime.Split(new[] { '.' }, 2);

                if (parts.Length != 2)
                {
                    return(null);
                }
                parts = parts[0].Split(new[] { '-' }, 3);
                if (parts.Length != 3)
                {
                    return(null);
                }
                switch (parts[1])
                {
                case "svr50":
                    return(VersionUtility.ParseFrameworkName("net451"));

                case "svrc50":
                    return(VersionUtility.ParseFrameworkName("k10"));
                }
                return(null);
            }
Example #28
0
        public IQueryable <IPackage> Search(string searchTerm, IEnumerable <string> targetFrameworks, bool allowPrereleaseVersions)
        {
            var cache = CachedPackages;

            var packages = cache.AsQueryable()
                           .Find(searchTerm)
                           .FilterByPrerelease(allowPrereleaseVersions);

            if (EnableDelisting)
            {
                packages = packages.Where(p => p.Listed);
            }

            if (EnableFrameworkFiltering && targetFrameworks.Any())
            {
                // Get the list of framework names
                var frameworkNames = targetFrameworks.Select(frameworkName => VersionUtility.ParseFrameworkName(frameworkName));

                packages = packages.Where(package => frameworkNames.Any(frameworkName => VersionUtility.IsCompatible(frameworkName, package.GetSupportedFrameworks())));
            }

            return(packages.AsQueryable());
        }
Example #29
0
        public void AppHostShowsErrorWhenCurrentTargetFrameworkWasNotFoundInProjectJson(string flavor, string os, string architecture)
        {
            var runtimeTargetFrameworkString    = flavor == "coreclr" ? FrameworkNames.LongNames.DnxCore50 : FrameworkNames.LongNames.Dnx451;
            var runtimeTargetFramework          = new FrameworkName(runtimeTargetFrameworkString);
            var runtimeTargetFrameworkShortName = VersionUtility.GetShortFrameworkName(runtimeTargetFramework);
            var runtimeType = flavor == "coreclr" ? "CoreCLR" : "CLR";

            runtimeType = RuntimeEnvironmentHelper.IsMono ? "Mono" : runtimeType;
            var runtimeHomeDir      = TestUtils.GetRuntimeHomeDir(flavor, os, architecture);
            var projectJsonContents = @"{
  ""frameworks"": {
    ""FRAMEWORK_NAME"": { }
  }
}".Replace("FRAMEWORK_NAME", flavor == "coreclr" ? "dnx451" : "dnxcore50");

            using (runtimeHomeDir)
                using (var projectPath = new DisposableDir())
                {
                    var projectName     = new DirectoryInfo(projectPath).Name;
                    var projectJsonPath = Path.Combine(projectPath, Project.ProjectFileName);
                    File.WriteAllText(projectJsonPath, projectJsonContents);

                    string stdOut, stdErr;
                    var    exitCode = TestUtils.ExecBootstrapper(
                        runtimeHomeDir,
                        arguments: $"run",
                        stdOut: out stdOut,
                        stdErr: out stdErr,
                        workingDir: projectPath);

                    // TODO: add complete error message check when OS version information is consistent on CoreCLR and CLR
                    var expectedErrorMsg = $@"The current runtime target framework is not compatible with '{projectName}'.";

                    Assert.Equal(1, exitCode);
                    Assert.Contains(expectedErrorMsg, stdErr);
                }
        }
        public static void Run(string[] args)
        {
            string  queryJsonString = File.ReadAllText("projectframeworks.v1.json");
            JObject queryJson       = JObject.Parse(queryJsonString);

            JObject compat = new JObject();

            IEnumerable <string> fwkNames = File.ReadLines("frameworks.txt").Select(x => x.Split(":".ToCharArray())[1].TrimStart()).OrderBy(x => x).Distinct().ToList();

            foreach (JToken queryFwkToken in queryJson["data"])
            {
                string queryFwk = (string)queryFwkToken;
                if (((IDictionary <string, JToken>)compat).ContainsKey(queryFwk))
                {
                    continue;
                }
                JObject compatList = new JObject();
                compat[queryFwk] = compatList;

                foreach (string fwk in fwkNames)
                {
                    if (VersionUtility.IsCompatible(new FrameworkName(queryFwk), new List <FrameworkName> {
                        new FrameworkName(fwk)
                    }))
                    {
                        compatList[fwk] = true;
                    }
                }
            }

            JObject wrapper = new JObject();

            wrapper["info"] = "Built from projectframeworks.v1.json and the output of the search index builder.";
            wrapper["data"] = compat;

            File.WriteAllText("frameworkCompat.v1.json", wrapper.ToString());
        }